1. 程式人生 > >百度webuploader上傳到阿里OSS

百度webuploader上傳到阿里OSS

百度webuploader 上傳 到 阿里 OSS

服務端簽名後直傳

https://help.aliyun.com/document_detail/31926.html?spm=5176.product31815.6.614.HI0PNh

圖片使用

java後臺簽名

Java程式碼 
  1. package wrules;  
  2. import java.io.IOException;  
  3. import java.sql.Date;  
  4. import java.util.LinkedHashMap;  
  5. import java.util.Map;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.annotation.WebServlet;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11. import org.json.JSONObject;  
  12. import com.aliyun.oss.OSSClient;  
  13. import com.aliyun.oss.common.utils.BinaryUtil;  
  14. import
     com.aliyun.oss.model.MatchMode;  
  15. import com.aliyun.oss.model.PolicyConditions;  
  16. @WebServlet(asyncSupported = true)  
  17. public class PostObjectPolicy extends HttpServlet{  
  18.     /** 
  19.      *  
  20.      */  
  21.     private static final long serialVersionUID = 5522372203700422672L;  
  22.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
     ServletException, IOException {   
  23.         String endpoint = "oss-cn-beijing.aliyuncs.com/";  
  24.         String accessId = "修改";  
  25.         String accessKey = "修改";  
  26.         String bucket = "修改";  
  27.         String dir = "user-dir";  
  28.         if(null!= request.getParameter("dir")){  
  29.             dir = request.getParameter("dir");  
  30.         }  
  31.         String host = "http://" + bucket + "." + endpoint;  
  32.         OSSClient client = new OSSClient(endpoint, accessId, accessKey);  
  33.         try {     
  34.             long expireTime = 30;  
  35.             long expireEndTime = System.currentTimeMillis() + expireTime * 1000;  
  36.             Date expiration = new Date(expireEndTime);  
  37.             PolicyConditions policyConds = new PolicyConditions();  
  38.             policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 01048576000);  
  39.             policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);  
  40.             String postPolicy = client.generatePostPolicy(expiration, policyConds);  
  41.             byte[] binaryData = postPolicy.getBytes("utf-8");  
  42.             String encodedPolicy = BinaryUtil.toBase64String(binaryData);  
  43.             String postSignature = client.calculatePostSignature(postPolicy);  
  44.             Map<String, String> respMap = new LinkedHashMap<String, String>();  
  45.             respMap.put("accessid", accessId);  
  46.             respMap.put("policy", encodedPolicy);  
  47.             respMap.put("signature", postSignature);  
  48.             //respMap.put("expire", formatISO8601Date(expiration));  
  49.             respMap.put("dir", dir);  
  50.             respMap.put("host", host);  
  51.             respMap.put("expire", String.valueOf(expireEndTime / 1000));  
  52.             JSONObject ja1 = new JSONObject(respMap);  
  53.             System.out.println(ja1.toString());  
  54.             response.setHeader("Access-Control-Allow-Origin""*");  
  55.             response.setHeader("Access-Control-Allow-Methods""GET, POST");  
  56.             response(request, response, ja1.toString());  
  57.         } catch (Exception e) {  
  58.             e.printStackTrace();  
  59.         }  
  60.     }  
  61.     private void response(HttpServletRequest request, HttpServletResponse response, String results) throws IOException {  
  62.         String callbackFunName = request.getParameter("callback");  
  63.         if (callbackFunName==null || callbackFunName.equalsIgnoreCase(""))  
  64.             response.getWriter().println(results);  
  65.         else  
  66.             response.getWriter().println(callbackFunName + "( "+results+" )");  
  67.         response.setStatus(HttpServletResponse.SC_OK);  
  68.         response.flushBuffer();  
  69.     }  
  70.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    
  71.         doGet(request, response);  
  72.     }  
  73. }  


javascript全域性引數

Javasrcipt程式碼 
  1. var objdata = {  
  2. upfile_endpoint:'http://修改.oss-cn-beijing.aliyuncs.com',//上傳地址  
  3. upfile_nametype:'random_name',//local_name random_name  上傳檔案的檔名型別  
  4. upfile_defaltdir:'upload/CCCC'//上傳路徑 多層  格式  upload/floder1/floder2  
  5. };  

Javasrcipt程式碼 
  1. uploader.on('uploadBeforeSend', function (obj, data, headers) {  
  2.   //TODO   如果同一個頁面上傳多次  需要處理簽名邏輯   不用每次都簽名  
  3.     $.ajax({  
  4.          type : "post",  
  5.          url : "osssignuature",  
  6.         timeout : 10000,  
  7.         data : {  
  8.             "dir" : objdata.upfile_defaltdir  
  9.         },  
  10.         success : function(str) {  
  11.             if (str) {  
  12.                 try {  
  13.                     var re = JSON.parse(str);                                          objdata.os ssignature = {  
  14.                                         'key' : re.dir, 'policy': re.policy,  
  15.                                         'OSSAccessKeyId': re.accessid,   
  16.                                         'success_action_status' : '200', //讓服務端返回200,不然,預設會返回204  
  17.                                         'signature': re.signature  
  18. };  
  19.                 } catch (e) {  
  20.                     alert("系統錯誤");  
  21.                 }  
  22.             } else {  
  23.                 alert("結果為空");  
  24.             }  
  25.         },  
  26.         error : function(XMLHttpRequest, textStatus, errorThrown) {  
  27.             alert("ajax error");  
  28.         },  
  29.         complete : function(XMLHttpRequest,status){ //請求完成後最終執行引數  
  30.             if(status == 'timeout'){  
  31.                 alert('請求超時,請稍後再試!');  
  32.             }  
  33.         },  
  34.         async : false  
  35.     });  
  36.     //賦值引數  
  37.     data = $.extend(data,objdata.osssignature);  
  38.     //設定檔案路徑  
  39.     data.key = data.key + "/" + calculate_object_name(data.name,objdata.upfile_nametype);  
  40.     obj.filepath = data.key;  
  41.     file.path = data.key;  
  42.     headers['Access-Control-Allow-Origin'] = "*";  
  43. });