我們知道一般的熱點資料我們直接存到資料庫,但是類似一些表格模闆,附件等靜态資源放在哪裡呢?
- 資料庫
- 資料庫 + 本地檔案(IO流)
- 資料庫 + 緩存 + 檔案伺服器(Hdfs 、fastDFS、伺服器叢集)
- 資料庫 + 緩存 + 檔案存儲(對象存儲服務OSS)
因為阿裡雲提供了各種常用語言的SDK,是以進行檔案的存儲就變得十分簡單,那本文就來介紹下阿裡雲的對象存儲OSS使用。
開通OSS服務
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iavZUW5o0LcVTMvwFNw8CXwIDMy8CXt92YugXM4FmLxM3Lc9CX6MHc0RHaiojIsJye.png)
搜尋後,購買直接就可以使用,它是按流量計算費用的,話說我們買個10塊錢的足夠我們基本的學習使用了,不夠了再充值嘛!我這裡因為用的就是阿裡雲伺服器,是以好像是贈送了40G的存儲,具體也懶的去了解,反正沒要我再交錢就是。
了解阿裡雲OSS
通過了解它的官方文檔,我們基本可以知道阿裡雲OSS提供了面向各種常用語言的SDk,通過這些SDK我們基本可以知道如何使用了。
點選
JAVA SDK快速入門
我們可以看到對應的maven 工程示例;這裡自己點進去了解即可!
題外話: 後面對于其他東西的學習,個人建議都是先找官方文檔了解,至于本篇部落格個人也隻是做個筆記,記錄下簡單的使用,肯定不如官網的全面。
快速上手
1.建立Bucket
如果你聽了我的建議,了解過JAVA SDk 中的工程例子,我想你應該知道要使用OSS 需要4個參數:
- endpoint
- AccessKeyID
- AccessKeySecret
- bucketName
這裡我們先記錄下
bucketName: oss-study01
;
endpoint:oss-cn-beijing.aliyuncs.com
2.建立檔案夾
建立一個存放圖檔的檔案夾
images
3.上傳一張圖檔測試
注意:是點選進此檔案後再上傳
這裡我們選擇單個檔案的權限是公共讀,當然你也可以通過修改整個檔案的權限,目前此檔案夾我們沒修改就是預設的私有的!
4.通路控制
添加使用者組-->建立使用者-->添加使用者到使用者組-->配置設定使用者組權限-->儲存賬号資訊
其實就像我們的系統的權限,角色和使用者的關系,某些使用者是某些角色,某些角色就具有某些配置設定好的權限!
具體步驟截圖如下:
記錄下
- AccessKeyID: LTAI4FoYHgbk2y3woYH191Ys
- AccessKeySecret:FVZzvz4G9e39ako5vVMASYryrbpnJu
測試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中哈;好,就先醬紫吧!
餘路那麼長,還是得帶着虔誠上路...