阿里雲OSS物件儲存-圖文詳解

語言: CN / TW / HK

認識OSS

    在實際的專案中,經常要用到上傳圖片的地方,阿里雲的OSS物件儲存,可以很好的將我們上傳的圖片儲存到阿里雲服務中,資料庫只要儲存圖片的訪問地址即可。
    下面我們主要來編寫後臺服務的OSS功能。前端的呼叫相關後續在講。

一、建立Bucket

這裡註冊阿里雲賬號和已經開通OSS物件儲存,這裡就不再說了,網上有很多的文案。

1. 進入OSS的控制檯,在Bucket 管理列表中,可以檢視到自己的Bucket 數量,如果已經有了,則不要建立。沒有的話,跟著我下面來建立一個Bucket 。 2. 點選建立Bucket ,進入到Bucket基本資訊填寫表單中。 在這裡插入圖片描述 3.基本資訊填寫 - 【Bucket名稱】 可以隨意取,最好跟自己的專案名稱有關係的名稱,避免後面建立的Bucket多了分不清楚。 - 【地域】可以任意選擇,可以根據自己所在區域進行選擇。 - 【Endpoint】預設不可修改的,這個後面編寫介面的時候要用到。 - 【所屬資源組】可以不選擇。 - 【儲存型別】自己學習用的話,選擇“低頻訪問選擇”就可以,如果是企業專案的話,最好選擇標準儲存。後面的歸檔型別,主要是存放後就基本不訪問的情況。我們這裡選擇“低頻訪問選擇”。 - 【HDFS服務】/【同城冗餘儲存】/【版本控制】這些都可以不用開啟。 - 【讀寫許可權】選擇“公共讀”就可以,寫的時候,後端介面會進行身份認證校驗的。 - 【服務端加密方式】/【實時日誌查詢】都可以不開通。 在這裡插入圖片描述 建立成功後,就會顯示在Bucket 列表中。 在這裡插入圖片描述

二、後臺服務介面編寫

官網幫助文件:http://help.aliyun.com/document_detail/32009.html

1.安裝SDK: 官網提供了三種SKD的安裝方式,這裡我們使用maven的方式安裝。 xml <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.15.1</version> </dependency> 2.建立Access Key:在OSS儲存物件首頁概覽中,最右側中的常用入口有Access Key的入口。如果沒有找到,或者在個人中心出的Access Key,也可以進入到Access Key設定頁面。 在這裡插入圖片描述 在這裡插入圖片描述 進入會有提示視窗,選擇繼續即可。 在這裡插入圖片描述 進入到Access Key列表頁面,如果建立過Access Key,可以直接使用,無需建立。如果沒有,點選建立,進行驗證碼建立即可。 建立成功後,就會有==AccessKey ID==和==AccessKeySecret==,後面後用到。

3.OSS訪問常量定義: 在進行檔案上傳的時候,需要身份的校驗,因此我們需要把身份驗證的相關資訊,定義在配置檔案中(yml/properties)。 這裡主要用到的幾個資訊是:endpoint、accessKeyId、accessKeySecret、bucketName。 ``` properties

配置阿里雲oss

aliyun.oss.file.endpoint=你的自己’‘endpoint’‘ aliyun.oss.file.keyid=你自己的’‘accessKeyId’‘ aliyun.oss.file.keysecret=你自己的’‘accessKeySecret’‘ aliyun.oss.file.bucketname=你自己的’‘bucketName’‘ ``` 如果找不到【endpoint】資訊的同學,可以進入你自己【Bucket 列表】,點選Bucket 名稱進入到Bucket 的詳情頁面。選擇【概覽】,進入頁面,下面就會有。選擇外網訪問中的Endpoint 在這裡插入圖片描述 4.上傳邏輯程式碼: - 使用Value()註解,注入在配置檔案中配的常量引數。 - 在filename檔案中,拼接了檔案目錄字串,檔案目錄以每日的格式進行儲存。(可選,如果不設定目錄的話,所有的圖片物件都全部儲存在根目錄) - 最後拼接圖片訪問的url,返回給前端,前端統一封裝成實體類,提交給新增/跟新的介面。

```java @Service public class OssServiceImpl implements OssService { @Value("${aliyun.oss.file.endpoint}") String endpoint; @Value("${aliyun.oss.file.keyid}") String accessKeyId; @Value("${aliyun.oss.file.keysecret}") String accessKeySecret; @Value("${aliyun.oss.file.bucketname}") String bucketName; @Override public String uploadFile(MultipartFile file) { String dir = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //獲取檔名 String filename = dir + "/" + file.getOriginalFilename();

    // 建立OSSClient例項。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

    try {
        //獲取檔案流
        InputStream inputStream = file.getInputStream();
        // 建立PutObject請求。
        ossClient.putObject(bucketName, filename, inputStream);
        //返回拼接後oss訪問路徑
        String url = "http://" + bucketName + "." + endpoint + "/" + filename;
        return url;
    } catch (OSSException oe) {
        System.out.println("Caught an OSSException, which means your request made it to OSS, "
                + "but was rejected with an error response for some reason.");
        System.out.println("Error Message:" + oe.getErrorMessage());
        System.out.println("Error Code:" + oe.getErrorCode());
        System.out.println("Request ID:" + oe.getRequestId());
        System.out.println("Host ID:" + oe.getHostId());

        return null ;
    } catch (ClientException ce) {
        System.out.println("Caught an ClientException, which means the client encountered "
                + "a serious internal problem while trying to communicate with OSS, "
                + "such as not being able to access the network.");
        System.out.println("Error Message:" + ce.getMessage());
        return null;
    }  catch (IOException e) {
        e.printStackTrace();
        return null;
    } finally {
        if (ossClient != null) {
            ossClient.shutdown();
        }
    }
}

} ```

三、介面測試

我這裡集成了swagger,直接在swagger-ui中進行測試。

  • 重啟服務成功。
  • 進入swagger-ui,上傳圖片後,提交。
  • 介面返回成功。
  • 進入OSS物件儲存服務中,也現在了上傳的圖片。

在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述

後面我們只要訪問這個URL就可以了。資料庫只要儲存這個地址。 在這裡插入圖片描述