1. 程式人生 > >ALI-OSS web簽名直傳檔案解讀

ALI-OSS web簽名直傳檔案解讀

想考慮這樣幾個問題

1、web簽名直傳與sdk提供的上傳有什麼不同?

2、web端上傳後,怎麼獲取傳輸在伺服器裡的檔案(怎麼下載)

解讀:

首先我們回顧下官方文件描述:

邏輯圖就不貼上複製了,使用這樣的上傳方式就是為了安全,服務端賬號密碼維護方便,利於前後端分離模式

要清楚的兩個邏輯點:

1、客戶端要上傳圖片時,到應用伺服器取上傳的policy及簽名。

2、客戶端拿到簽名直接上傳到OSS。

3、在控制檯中加入兩個配置:跨域設定,域名配置

廢話不多說直接上碼:

碼前說明:
BUCKET_NAME :你在伺服器中建立的儲存空間名,在它裡面就可以進行儲存了,還可以建立資料夾;
url字尾ENDPOINT:找對應自己使用的,在sdk中隨處可查
dirName:資料夾名稱,自己定義

***這是Client 例項裡面的三個引數你們都有
public static OSSClient getOSSClient() {
        OSSClient ossClient = new OSSClient(ENDPOINT, ACCESS_KEY_ID,
                ACCESS_KEY_SECRET);
        return ossClient;
    }
        String host = "http://" + BUCKET_NAME + "." + "ENDPOINT";//這裡的ENDPOINT記得是去掉http://的格式。url不可能存在兩個http頭的
        OSSClient ossClient = null
; try { ossClient = getOSSClient(); long expireTime = 30; long expireEndTime = System.currentTimeMillis() + expireTime * 1000; java.sql.Date expiration = new java.sql.Date(expireEndTime); PolicyConditions policyConds = new PolicyConditions(); policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dirName); String postPolicy = ossClient.generatePostPolicy(expiration, policyConds); byte[] binaryData = postPolicy.getBytes("utf-8"); String encodedPolicy = BinaryUtil.toBase64String(binaryData); String postSignature = ossClient.calculatePostSignature(postPolicy); Map<String, String> respMap = new LinkedHashMap<String, String>();//這裡主要是給前端更多的可讀寫資訊所以過分的封裝了,如果前端對你不好,就少給他幾個,讓他自己擷取去 respMap.put("accessid", ACCESS_KEY_ID); respMap.put("policy", encodedPolicy); respMap.put("signature", postSignature); respMap.put("bucketName", BUCKET_NAME); respMap.put("dir", dirName); respMap.put("host", host); respMap.put("expire", String.valueOf(expireEndTime / 1000)); JSONObject ja1 = JSONObject.fromObject(respMap); System.out.println(ja1.toString()); return ja1.toString(); } catch (Exception e) { ossClient.shutdown(); log.error("AliOSSUtil ---- >> fileUrl 下載地址異常, e = {}", e); return null; }

上面要注意的幾個容易寫的引數已經描述的很清楚了,接下來瘋狂的複製輸出就行了

下面是重點:

前端獲取到Map中的引數封裝web直傳程式碼,官方文件寫好了,瘋狂輸出就可以了,
前端傳輸中有個key,畫上重點,他對你很重要,我剛昨天接觸這個介面時誤以為會返回給前端個url或者其他直連方式,後來測了幾個小時無濟於事果斷想把他手裡的key用掉,接著去看自己以前寫的下載資訊。在SDK-授權訪問 中有這樣的一個方法:使用URL簽名授權訪問
你的key和你名稱空間引數放進去,瘋狂輸出吧,也可以下載回本地,本文到此結束,希望能幫助各位快速開發少走彎路。不喜勿噴謝謝