天天看點

阿裡雲OSS實踐篇

我們知道一般的熱點資料我們直接存到資料庫,但是類似一些表格模闆,附件等靜态資源放在哪裡呢?
  • 資料庫
  • 資料庫 + 本地檔案(IO流)
  • 資料庫 + 緩存 + 檔案伺服器(Hdfs 、fastDFS、伺服器叢集)
  • 資料庫 + 緩存 + 檔案存儲(對象存儲服務OSS)

因為阿裡雲提供了各種常用語言的SDK,是以進行檔案的存儲就變得十分簡單,那本文就來介紹下阿裡雲的對象存儲OSS使用。

開通OSS服務

阿裡雲OSS實踐篇

搜尋後,購買直接就可以使用,它是按流量計算費用的,話說我們買個10塊錢的足夠我們基本的學習使用了,不夠了再充值嘛!我這裡因為用的就是阿裡雲伺服器,是以好像是贈送了40G的存儲,具體也懶的去了解,反正沒要我再交錢就是。

了解阿裡雲OSS

阿裡雲OSS實踐篇

通過了解它的官方文檔,我們基本可以知道阿裡雲OSS提供了面向各種常用語言的SDk,通過這些SDK我們基本可以知道如何使用了。

阿裡雲OSS實踐篇

點選

JAVA SDK快速入門

我們可以看到對應的maven 工程示例;這裡自己點進去了解即可!

題外話: 後面對于其他東西的學習,個人建議都是先找官方文檔了解,至于本篇部落格個人也隻是做個筆記,記錄下簡單的使用,肯定不如官網的全面。

快速上手

1.建立Bucket

阿裡雲OSS實踐篇

如果你聽了我的建議,了解過JAVA SDk 中的工程例子,我想你應該知道要使用OSS 需要4個參數:

  • endpoint
  • AccessKeyID
  • AccessKeySecret
  • bucketName

這裡我們先記錄下

bucketName: oss-study01

;

endpoint:oss-cn-beijing.aliyuncs.com

2.建立檔案夾

阿裡雲OSS實踐篇

建立一個存放圖檔的檔案夾

images

3.上傳一張圖檔測試

注意:是點選進此檔案後再上傳

這裡我們選擇單個檔案的權限是公共讀,當然你也可以通過修改整個檔案的權限,目前此檔案夾我們沒修改就是預設的私有的!

阿裡雲OSS實踐篇

4.通路控制

阿裡雲OSS實踐篇

添加使用者組-->建立使用者-->添加使用者到使用者組-->配置設定使用者組權限-->儲存賬号資訊

其實就像我們的系統的權限,角色和使用者的關系,某些使用者是某些角色,某些角色就具有某些配置設定好的權限!

具體步驟截圖如下:

阿裡雲OSS實踐篇
阿裡雲OSS實踐篇
阿裡雲OSS實踐篇

記錄下

  • AccessKeyID: LTAI4FoYHgbk2y3woYH191Ys
  • AccessKeySecret:FVZzvz4G9e39ako5vVMASYryrbpnJu
阿裡雲OSS實踐篇
阿裡雲OSS實踐篇

測試SDK

1.建立微服務,引入阿裡OSS依賴

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.8.0</version>
</dependency>
           

2. 測試

package com.coding.aliyunoss;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import org.junit.Test;
import java.io.File;

public class OSSTest {

    String endpoint = "oss-cn-beijing.aliyuncs.com";
    // 阿裡雲主賬号AccessKey擁有所有API的通路權限,風險很高。
    // 強烈建議您建立并使用RAM賬号進行API通路或日常運維,
    // 請登入 https://ram.console.aliyun.com 建立RAM賬号。
    String accessKeyId = "LTAI4FoYHgbk2y3woYH191Ys";
    String accessKeySecret = "FVZzvz4G9e39ako5vVMASYryrbpnJu";
    String bucketName = "oss-study01";

    // 判斷是否 bucketName,如果不存在就建立,修改權限

    // 建立oss 執行個體
    @Test
    public void testCreate(){
        // 對象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 方法
        ossClient.createBucket(bucketName);
        // 關閉對象
        ossClient.shutdown();
    }

    // 判斷目前執行個體是否存在
    @Test
    public void testExist(){
        // 對象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 方法
        boolean exist = ossClient.doesBucketExist(bucketName);
        System.out.println(exist);
        // 關閉對象
        ossClient.shutdown();
    }

    // 修改權限 公共讀
    @Test
    public void testUpdate(){
        // 對象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 方法 (修改已經有的,建立新的)
        ossClient.setBucketAcl(bucketName,CannedAccessControlList.PublicRead);
        // 關閉對象
        ossClient.shutdown();
    }

    // 上傳檔案

    // 上傳檔案流。
    @Test
    public void testFileUpload(){
        // 對象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 方法 (修改已經有的,建立新的)
        // 上傳到 oss 後需要一個檔案名(保證唯一 /2020/4/1/xxxxxxxx.jpg)!
        String objectName = "images/default.jpg";
        ossClient.putObject(bucketName, objectName, new File("C:\\Users\\Administrator\\Desktop\\dafault.jpg"));

        // 關閉對象
        ossClient.shutdown();
    }


    // 下載下傳檔案
    @Test
    public void testDownload(){
        // 對象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 方法 (修改已經有的,建立新的)
        String objectName = "images/default.jpg";
        ossClient.getObject(new GetObjectRequest(bucketName,objectName),new File("a.jpg"));

        // 關閉對象
        ossClient.shutdown();
    }

    // 檢視檔案清單
    @Test
    public void testShowList(){
        // 對象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 方法 (修改已經有的,建立新的)
        // ossClient.listObjects傳回ObjectListing執行個體,包含此次listObject請求的傳回結果。
        ObjectListing objectListing = ossClient.listObjects(bucketName);
        // objectListing.getObjectSummaries擷取所有檔案的描述資訊。
        for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
            System.out.println(" - " + objectSummary.getKey() + "  		 " +"(size = " + objectSummary.getSize() + ")");
        }

        // 關閉對象
        ossClient.shutdown();
    }


    // 删除檔案
    @Test
    public void testDeleted(){
        // 對象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 方法 (修改已經有的,建立新的)
        String objectName = "images/default.jpg";
        ossClient.deleteObject(bucketName,objectName);
        // 關閉對象
        ossClient.shutdown();
    }
}
           

後面我們就可以用接口調用,完成我們檔案的上傳和下載下傳了。是不是很簡單?趕快去試試吧;當然這隻是測試代碼,别忘了參數啥的應該弄成可配置的還有對象等的關閉都應該放在finally中哈;好,就先醬紫吧!

餘路那麼長,還是得帶着虔誠上路...

繼續閱讀