當表單中的數據比較多或者有文件時,利用formdata會大大提高效率,省點時間玩游戲。
舉個簡單的例子:(默認使用jQuery)
HTML
<form id="uploadForm">
<p>上傳人: <input type="text" name="author" value="" /></p>
<p>上傳文件: <input type="file" name="file" /></ p>
<button type="button" onclick="upload()">提交</button>
</form>
JS
function upload() {
var formData = new FormData($('#uploadForm')[0]);
console.log(formData);
$.ajax({
url: 'http://localhost:7070/index.php?m=Admin&c=Index&a=upload',
type: 'POST',
data: formData,
dataType: 'JSON',
async: false,
cache: false,
contentType: false,// 告訴jQuery不要去設置Content-Type請求頭
processData: false,// 告訴jQuery不要去處理發送的數據
success: function (returndata) {
console.log(returndata);
},
error: function (returndata) {
console.log(returndata);
}
});
}
PHP ---TP
public function upload(){
//獲取上傳者
$author = I('author');
//配合七牛云使用
$setting = C('UPLOAD_SITEIMG_QINIU');
$Upload = new \Think\Upload($setting);
$info = $Upload->upload($_FILES);
}
config配置
'UPLOAD_SITEIMG_QINIU' => array (
'maxSize' => 5 * 1024 * 1024,//文件大小
'rootPath' => './',
'saveName' => array ('uniqid', ''),
'driver' => 'Qiniu',
'driverConfig' => array (
'secretKey' => '<這里填七牛SK>',
'accessKey' => '<這里填七牛AK>',
'domain' => 'olhv93l10.bkt.clouddn.com',
'bucket' => '<空間名稱>',
)
)
七牛云的下載
七牛云的空間分私有和公開,下面說明,參考官方文檔。
私有空間
私有資源下載是通過HTTP GET的方式訪問特定的 URL。私有資源URL與公開資源URL相比只是增加了兩個參數e和token,分別表示過期時間和下載憑證。一個完整的私有資源 URL
http://<domain>/<key>?e=<deadline>&token=<downloadToken>
私有的空間就需要用到下載憑證生成,可以用SDK,這里我沒有用。這里舉個比較簡單的例子。如下:
下載鏈接生成
TP的話 把這個放在common/common/function.php中 就能在其他模塊中調用
function Qiniu_Encode($str) // URLSafeBase64Encode
{
$find = array('+', '/');
$replace = array('-', '_');
return str_replace($find, $replace, base64_encode($str));
}
function Qiniu_Sign($url) {//$info里面的url
$setting = C ( 'UPLOAD_SITEIMG_QINIU' );
$duetime = time()+ 86400;//下載憑證有效時間
$DownloadUrl = $url . '?e=' . $duetime;
$Sign = hash_hmac ( 'sha1', $DownloadUrl, $setting ["driverConfig"] ["secretKey"], true );
$EncodedSign = Qiniu_Encode ( $Sign );
$Token = $setting ["driverConfig"] ["accessKey"] . ':' . $EncodedSign;
$RealDownloadUrl = $DownloadUrl . '&token=' . $Token;
return $RealDownloadUrl;//$RealDownloadUrl為下載對應私有資源的可用URL
}
TP的控制器部分代碼
就是我們之前寫的PHP代碼 加點東西
public function upload(){
//獲取上傳者
$author = I('author');
//配合七牛云使用
$setting = C('UPLOAD_SITEIMG_QINIU');
$Upload = new \Think\Upload($setting);
$info = $Upload->upload($_FILES);
//共有空間下載鏈接
$url = $info['file']['url'];
if($info){
//私有空間下載鏈接
$link['url'] = Qiniu_Sign($url);
return show(0,'上傳成功',$link);//如果想用公開就把$link改成$url
}else{
return show(0,'上傳失敗');
}
}
show是我自己寫的一個方法代碼如下
function show($status,$message,$data=array()){
$result = array(
'status' => $status,
'message' => $message,
'data' => $data
);
exit(json_encode($result));
}
接下來只要前端對數據進行簡單處理就行了,附上ajax請求成功代碼片段
success: function (result) {
// console.log(returndata);
var res = eval("("+result+")");
//私有空間下載
$('#header-img')[0].src = res.data.url;//把圖片src改成七牛云的地址 就可以看到的時候就成功了
//共有鏈接下載地址
//$('#header-img')[0].src = res.data;
}
公開空間
公開資源下載通過HTTP GET的方式訪問資源 URL 即可。資源 URL 的構成如下:
http://<domain>/<key>
超級簡單 首先先修改上文提到config.php文件中 代碼如下
'domain' => 'olhv93l10.bkt.clouddn.com',//把這個改成公開空間
其他的上面也寫到了 嘿嘿
更加詳細的TP七牛云使用可以訪問官網論壇 http://www.thinkphp.cn/code/643.html
關于七牛云的下載資源的文檔 https://developer.qiniu.com/kodo/manual/download-process