部分js代碼
send_request = function(){//這是從后台獲取認證策略等信息。
var htmlobj=$.ajax({url:root+"/service/policyInfoController/policy",async:false});
return htmlobj.responseText;
};
function get_signature()//讀取獲得的參數
{
//可以判斷當前expire是否超過了當前時間,如果超過了當前時間,就重新取一下.3s 做為緩沖
now = timestamp = Date.parse(new Date()) / 1000;
if (expire < now + 3)
{
body = send_request();
console.log(body);
var obj = eval ("(" + body + ")");
host = obj['host']
policyBase64 = obj['policy']
accessid = obj['accessid']
signature = obj['signature']
expire = parseInt(obj['expire'])
callbackbody = obj['callback']
key = obj['dir']
return true;
}
return false;
};
//組裝發送數據
var request = new FormData();
request.append("OSSAccessKeyId",accessid);//Bucket 擁有者的Access Key Id。
request.append("policy",policyBase64);//policy規定了請求的表單域的合法性
request.append("Signature",signature);//根據Access Key Secret和policy計算的簽名信息,OSS驗證該簽名信息從而驗證該Post請求的合法性
//---以上都是阿里的認證策略
request.append("key",g_object_name);//文件名字,可設置路徑
request.append("success_action_status",'200');// 讓服務端返回200,不然,默認會返回204
request.append('file', file);//需要上傳的文件 file
request.append("callback",callbackbody);//回調,非必選,可以在policy中自定義
$.ajax({
url : host, //上傳阿里地址
data : request,
processData: false,//默認true,設置為 false,不需要進行序列化處理
cache: false,//設置為false將不會從瀏覽器緩存中加載請求信息
async: false,//發送同步請求
contentType: false,//避免服務器不能正常解析文件---------具體的可以查下這些參數的含義
dataType: 'JSONP',//不涉及跨域 寫json即可
type : 'post',
success : function(callbackHost, request) { //callbackHost:success,request中就是 回調的一些信息,包括狀態碼什么的
var name=$this.attr("name");
$this.closest("li").append("<span class='img-span'><img src="+host+"/"+get_uploaded_object_name(file.name)+">");//動態向頁面添加上傳圖片
},
error : function(returndata) {
alert("上傳圖片出錯",false);
}
});
由於業務原因以及一些樣式的問題不得不用ajax方式上傳,大家參考下即可。
