開通阿里雲的對象存儲服務OSS

1. 從菜單找到對象存儲服務

2. 管理控制檯

3. 創建Bucket

4. 獲取對應SDK

https://help.aliyun.com/document_detail/32013.html?spm=5176.8466032.0.0.2a3e1450JpDna1

從概覽中獲取EndPoint

展示實例代碼:

5. 配置訪問控制權限

6. 開通子賬戶

7.根據需要設置授權

 

如果使用的 springboot項目的話:

https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

參照以下demo

Alibaba Cloud OSS Example 

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alicloud-oss</artifactId>
</dependency>

在配置中添加一下參數 

spring.cloud.alicloud.oss.sts.access-key=
spring.cloud.alicloud.oss.sts.secret-key=
spring.cloud.alicloud.oss.endpoint=

https://help.aliyun.com/document_detail/31926.html?spm=a2c4g.11186623.4.3.163c74b8ZdDkbY

採用從服務端獲取簽名後,又客戶端拿着簽名直接上傳 , 這樣前端會涉及跨域的問題,需要在阿里雲中進行設置

 

後端java示例代碼 : 摘自阿里雲https://help.aliyun.com/document_detail/91868.html?spm=a2c4g.11186623.2.15.320a6e2806pupl#concept-ahk-rfz-2fb 

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String accessId = "<yourAccessKeyId>"; // 請填寫您的AccessKeyId。
        String accessKey = "<yourAccessKeySecret>"; // 請填寫您的AccessKeySecret。
        String endpoint = "oss-cn-hangzhou.aliyuncs.com"; // 請填寫您的 endpoint。
        String bucket = "bucket-name"; // 請填寫您的 bucketname 。
        String host = "https://" + bucket + "." + endpoint; // host的格式爲 bucketname.endpoint
        // callbackUrl爲 上傳回調服務器的URL,請將下面的IP和Port配置爲您自己的真實信息。
        String callbackUrl = "http://88.88.88.88:8888";
        String dir = "user-dir-prefix/"; // 用戶上傳文件時指定的前綴。

        // 創建OSSClient實例。
        OSS ossClient = new OSSClientBuilder().build(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("dir", dir);
            respMap.put("host", host);
            respMap.put("expire", String.valueOf(expireEndTime / 1000));
            // respMap.put("expire", formatISO8601Date(expiration));

            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);

            JSONObject ja1 = JSONObject.fromObject(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) {
            // Assert.fail(e.getMessage());
            System.out.println(e.getMessage());
        } finally { 
            ossClient.shutdown();
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章