部分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方式上傳,大家參考下即可。