您好,登錄后才能下訂單哦!
OSS JavaScript客戶端是怎樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
使用 OSS 上傳到文件服務器做文件存儲,還是一樣通過 客戶端直傳,服務端只需要做一個簽名的加密,這樣子既可以做到安全性,又降低了服務端的壓力:
OSS 客戶daunt直傳官方文檔
大致的實現流程可以看下,簽名對于我的理解是防止 篡改性,保證安全性
這上面的流程大家看下,應該就懂了,就是簽名,上傳,然后接收回調信息,然后告訴客戶端成功了,這樣子就是一個上傳成功的實現。
這里是服務端的簽名,大家根據自己的語言選擇下載,我這邊是以java為主,
如果不懂,文件存儲等一些桶的配置,跨域的可以看看官方的文檔
OSS 配置文檔這里描述了這么去設置OSS的一些配置
設置好了之后我們來看看官方給的代碼吧,我們需要設置一些什么呢:
bucketName: myxxxxxxxxxxxxx1 accessKey: LTAxxxxxxxxxxxxx1 secretKey: 46MxxxxxxxxxxxxxOe4yU region: oss-cn-beijing.aliyuncs.com dir: xxxxxxxxxxxxx/
bucketName就是Bucket的名稱,region就是區域,dir就是目錄了
我這里已經把代碼都整理好了,需要的自取:
https://github.com/qurenneng/CloudObjectWeb-java,可以點個start哦
下載下來后,依賴都已經弄好了可以直接跑起來,然后訪問 http://localhost:8084/index.html,這里要注意跨域一定要設置好,而且,OSS有一個問題,就是上傳成功后回調,所以這里必須要放在云服務器上面才能進行測試,因為要接受OSS發送過來的回調參數,所以測試只能在服務器上面進行測試,需要的可以看 https://www.aliyun.com/activity?userCode=ooxl1zly
接下來我們看看代碼吧:
CommonApiController:
/** 阿里云 oss web直傳
* 驗證簽名:
* @return
*/
@GetMapping("/callbackSign")
public Map<String, String> callbackSign(){
OssStsAuth ossStsAuth= new OssStsAuth();
Map<String, String> sign = ossStsAuth.getSign(ossProperties);
return sign;
}
/**
* 阿里云 oss 回調進行回調:
* @return
*/
@RequestMapping("/callbackUrl")
public void callbackUrl(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
OssStsAuth ossStsAuth= new OssStsAuth();
String ossCallbackBody = ossStsAuth.GetPostBody(request.getInputStream(),
Integer.parseInt(request.getHeader("content-length")));
boolean b = ossStsAuth.VerifyOSSCallbackRequest(request, ossCallbackBody);
if(b){
ossStsAuth.response(request, response, "{\"Status\":\"OK\"}", HttpServletResponse.SC_OK);
}else{
ossStsAuth.response(request, response, "{\"Status\":\"verdify not ok\"}", HttpServletResponse.SC_BAD_REQUEST);
}
}
上面就是客戶端上傳的控制層,下面的接口是用戶接受OSS回調的接口
OssStsAuth:
public Map<String, String> getSign(OssProperties cosProperties){
String accessId = cosProperties.getAccessKey(); // 請填寫您的AccessKeyId。
String accessKey = cosProperties.getSecretKey(); // 請填寫您的AccessKeySecret。
String endpoint = cosProperties.getRegion(); // 請填寫您的 endpoint。
String bucket = cosProperties.getBucketName(); // 請填寫您的 bucketname 。
String host = "http://"> // callbackUrl為 上傳回調服務器的URL,請將下面的IP和Port配置為您自己的真實信息。
String callbackUrl = "http://ip:8084/callbackUrl";
String dir = cosProperties.getDir(); // 用戶上傳文件時指定的前綴。
Map<String, String> respMap = new LinkedHashMap<String, String>();
OSSClient client = new OSSClient(endpoint, accessId, accessKey);
try {
long expireTime = 1000; //官方默認是 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);
respMap.put("accessid", accessId);
respMap.put("policy", encodedPolicy);
respMap.put("signature", postSignature);
respMap.put("dir", dir);
respMap.put("host", host);
respMap.put("expire", String.valueOf(expireEndTime / 1000));
JSONObject jasonCallback = new JSONObject();
jasonCallback.put("callbackUrl", callbackUrl);
jasonCallback.put("callbackBody",
"filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");
jasonCallback.put("callbackBodyType", "application/x-www-form-urlencoded");
String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());
respMap.put("callback", base64CallbackBody);
return respMap;
} catch (Exception e) {
System.out.println(e.getMessage());
}
return respMap;
}
需要配置的參數都設置在application.yml文件中,
ossProperties:這個配置中,大家運行起來后直接訪問上傳就好了,配置等設置一定要弄好,有問題就下方評論吧
關于OSS JavaScript客戶端是怎樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。