百度webuploader上傳到阿里OSS
阿新 • • 發佈:2019-01-29
百度webuploader 上傳 到 阿里 OSS
服務端簽名後直傳
https://help.aliyun.com/document_detail/31926.html?spm=5176.product31815.6.614.HI0PNh圖片使用
java後臺簽名
Java程式碼- package wrules;
- import java.io.IOException;
- import java.sql.Date;
- import java.util.LinkedHashMap;
- import java.util.Map;
-
import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.json.JSONObject;
- import com.aliyun.oss.OSSClient;
- import com.aliyun.oss.common.utils.BinaryUtil;
-
import
- import com.aliyun.oss.model.PolicyConditions;
- @WebServlet(asyncSupported = true)
- public class PostObjectPolicy extends HttpServlet{
- /**
- *
- */
- private static final long serialVersionUID = 5522372203700422672L;
-
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
- String endpoint = "oss-cn-beijing.aliyuncs.com/";
- String accessId = "修改";
- String accessKey = "修改";
- String bucket = "修改";
- String dir = "user-dir";
- if(null!= request.getParameter("dir")){
- dir = request.getParameter("dir");
- }
- String host = "http://" + bucket + "." + endpoint;
- OSSClient client = new OSSClient(endpoint, accessId, accessKey);
- try {
- long expireTime = 30;
- long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
- Date expiration = new Date(expireEndTime);
- PolicyConditions policyConds = new PolicyConditions();
- policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
- policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
- String postPolicy = client.generatePostPolicy(expiration, policyConds);
- byte[] binaryData = postPolicy.getBytes("utf-8");
- String encodedPolicy = BinaryUtil.toBase64String(binaryData);
- String postSignature = client.calculatePostSignature(postPolicy);
- Map<String, String> respMap = new LinkedHashMap<String, String>();
- respMap.put("accessid", accessId);
- respMap.put("policy", encodedPolicy);
- respMap.put("signature", postSignature);
- //respMap.put("expire", formatISO8601Date(expiration));
- respMap.put("dir", dir);
- respMap.put("host", host);
- respMap.put("expire", String.valueOf(expireEndTime / 1000));
- JSONObject ja1 = new JSONObject(respMap);
- System.out.println(ja1.toString());
- response.setHeader("Access-Control-Allow-Origin", "*");
- response.setHeader("Access-Control-Allow-Methods", "GET, POST");
- response(request, response, ja1.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private void response(HttpServletRequest request, HttpServletResponse response, String results) throws IOException {
- String callbackFunName = request.getParameter("callback");
- if (callbackFunName==null || callbackFunName.equalsIgnoreCase(""))
- response.getWriter().println(results);
- else
- response.getWriter().println(callbackFunName + "( "+results+" )");
- response.setStatus(HttpServletResponse.SC_OK);
- response.flushBuffer();
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- doGet(request, response);
- }
- }
javascript全域性引數
Javasrcipt程式碼- var objdata = {
- upfile_endpoint:'http://修改.oss-cn-beijing.aliyuncs.com',//上傳地址
- upfile_nametype:'random_name',//local_name random_name 上傳檔案的檔名型別
- upfile_defaltdir:'upload/CCCC'//上傳路徑 多層 格式 upload/floder1/floder2
- };
Javasrcipt程式碼
- uploader.on('uploadBeforeSend', function (obj, data, headers) {
- //TODO 如果同一個頁面上傳多次 需要處理簽名邏輯 不用每次都簽名
- $.ajax({
- type : "post",
- url : "osssignuature",
- timeout : 10000,
- data : {
- "dir" : objdata.upfile_defaltdir
- },
- success : function(str) {
- if (str) {
- try {
- var re = JSON.parse(str); objdata.os ssignature = {
- 'key' : re.dir, 'policy': re.policy,
- 'OSSAccessKeyId': re.accessid,
- 'success_action_status' : '200', //讓服務端返回200,不然,預設會返回204
- 'signature': re.signature
- };
- } catch (e) {
- alert("系統錯誤");
- }
- } else {
- alert("結果為空");
- }
- },
- error : function(XMLHttpRequest, textStatus, errorThrown) {
- alert("ajax error");
- },
- complete : function(XMLHttpRequest,status){ //請求完成後最終執行引數
- if(status == 'timeout'){
- alert('請求超時,請稍後再試!');
- }
- },
- async : false
- });
- //賦值引數
- data = $.extend(data,objdata.osssignature);
- //設定檔案路徑
- data.key = data.key + "/" + calculate_object_name(data.name,objdata.upfile_nametype);
- obj.filepath = data.key;
- file.path = data.key;
- headers['Access-Control-Allow-Origin'] = "*";
- });