SpringBoot使用阿里OSS實現檔案雲端儲存
SpringBoot使用阿里OSS實現檔案雲端儲存
前言
我們在專案中經常會使用到圖片或者文件資源,一般來說如何這類檔案比較少的時候我們可以直接存在在伺服器中,但是如果一旦這些檔案到達一定數量的時候如果在放在應用伺服器必然會影響應用伺服器的效能,並且有時候這些圖片資源也要直接用在前端顯示當中,所以放在應用伺服器也是不妥的。一些比較大的網際網路公司可能會使用一些分散式檔案系統來達到儲存檔案的目的,但這種方式門檻過高。如何找到一個合適且價效比高的檔案儲存方式呢?那麼不得不說的就是物件儲存服務OSS
.
FastDFS分散式檔案系統可參考我的部落格:FastDFS分散式檔案系統
正文
物件儲存服務
物件儲存服務(OSS
):是一種海量、安全、低成本、高可靠的雲端儲存服務,適合存放任意型別的檔案:
OSS
可用於圖片、音視訊、日誌等海量檔案的儲存。- 各種終端裝置、
Web
網站程式、移動應用可以直接向OSS
寫入或讀取資料。 OSS
支援流式寫入和檔案寫入兩種方式。
簡單地來說,我們通過OSS
可以避免在伺服器中儲存大量的檔案、圖片等資源增加伺服器的IO
的讀寫頻寬。
SpringBoot使用阿里OSS實現檔案雲端儲存
前期準備
第一步:在阿里雲商城購買物件儲存服務
第二步:在阿里雲控制檯配置AccessKey
程式碼部分
maven依賴
<!--oss物件關係儲存-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.5.0</version>
</dependency>
<!--apache comment tools-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!--提供檔案上傳下載-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
application.properties:配置類
##basic setting
server.port = 8080
server.address =127.0.0.1
# 解除檔案大小限制
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
OssManagerUtil.java:阿里OSS工具類
/**
* 阿里Oss物件儲存工具類
*/
public class OssManagerUtil {
private static String endpoint = “oss中獲取的oss公網路徑";
private static String accessKeyId = “自己在阿里雲申請的accessKeyId";
private static String accessKeySecret = "自己在阿里雲申請的accessKeySecret";
private static String bucket = "bucket名稱";
private static OSS client;
static {
client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
/**
* 上傳圖片
*
* @param fileName 圖片名稱,圖片名稱包括資料夾名稱和“/”
* @param length 圖片大小
* @param content 輸入流
*/
public static String uploadImage(String fileName, long length, InputStream content) {
uploadBucketImage(bucket, fileName, length, content);
return "https://" + bucket + "." + endpoint + "/" + fileName;
}
/**
* 上傳檔案
*
* @param bucket 儲存空間名
* @param fileName 檔名(包括資料夾名稱和“/”)
* @param length 流的長度
* @param content 輸入流
*/
public static void uploadBucketImage(String bucket, String fileName, long length, InputStream content) {
// 建立上傳Object的Metadata
ObjectMetadata meta = new ObjectMetadata();
// 必須設定ContentLength
meta.setContentLength(length);
// 上傳Object.
client.putObject(bucket, fileName, content, meta);
}
/**
* 刪除檔案
*
* @param fileName 檔名稱,圖片名稱包括資料夾名稱和“/”
*/
public static boolean delShopImage(String fileName) {
//判斷檔案是否存在
boolean exist = client.doesObjectExist(bucket, fileName);
//檔案不存在刪除失敗
if (!exist) {
return false;
}
//執行刪除
client.deleteObject(bucket, fileName);
return true;
}
/**
* 獲得上傳檔案後url連結
*
* @param fileName 檔名(包括資料夾名稱和“/”)
* @return
*/
public static String getUrl(String fileName) {
// 設定URL過期時間為10年 3600l* 1000*24*365*10
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
// 生成URL
URL url = client.generatePresignedUrl(bucket, fileName, expiration);
if (url != null) {
return url.toString();
}
return null;
}
/**
* 建立儲存空間
*
* @param bucketName 新建儲存空間預設為標準儲存型別,私有許可權。
* @return
*/
public static void crateBucket(String bucketName) {
// 新建儲存空間預設為標準儲存型別,私有許可權。
client.createBucket(bucketName);
}
}
驗證
測試介面:檔案上傳
/**
* 檔案上傳到阿里oss
*/
@PostMapping("/uploadFiletoOss")
@ApiOperation(value = "檔案上傳到阿里oss")
public ResponseResult uploadFiletoOss(@RequestParam("file")MultipartFile file)throws IOException{
String fileName = file.getOriginalFilename();
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
fileName = UUID.randomUUID().toString().replace("-", "") + "." + suffix;
String url = OssManagerUtil.uploadImage(fileName,file.getInputStream().available(),file.getInputStream());
return ResponseResult.success(url);
}
訪問測試介面:
開啟介面返回的OSS線上檔案URL,得到線上檔案:
原始碼
專案原始碼可從的我的github中獲取:github原始碼地址
該原始碼解析可參考我的部落格:開箱即用的SpringBoot模板
相關文章
- SpringBoot整合阿里雲OSS物件儲存實現檔案上傳Spring Boot阿里物件
- 阿里雲OSS雲端儲存管理實踐阿里
- Spring Boot 整合阿里雲 OSS 進行檔案儲存Spring Boot阿里
- Laravel 使用阿里雲 oss 儲存物件Laravel阿里物件
- 使用axios上傳檔案到阿里雲物件檔案儲存伺服器ossiOS阿里物件伺服器
- Springboot 遷移及上傳檔案至阿里雲OSSSpring Boot阿里
- OSS雲端儲存管理實踐(體驗有禮)
- 阿里雲物件儲存OSS支援版本管理特性阿里物件
- nodejs 使用七牛雲端儲存上傳檔案NodeJS
- 阿里雲物件儲存OSS及CDN加速配置阿里物件
- Serverless 使用阿里雲OOS將http檔案轉存到物件儲存Server阿里HTTP物件
- 阿里雲 oss 檔案上傳 小坑阿里
- 前端(react)上傳到阿里雲OSS儲存 例項前端React阿里
- Unirech:阿里雲國際站的物件儲存oss與自建儲存的區別阿里物件
- flutter直接上傳檔案到阿里雲ossFlutter阿里
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- SpringBoot 整合 阿里雲OSS 儲存服務,快來免費搭建一個自己的圖床Spring Boot阿里圖床
- J2EE分散式架構整合阿里雲OSS儲存分散式架構阿里
- vue 阿里雲oss下載檔案,自定義命名Vue阿里
- 阿里雲oss的檔案無法使用URL訪問,返回:This XML file does not appear阿里XMLAPP
- 五項措施,讓阿里雲端儲存更安全阿里
- 塊儲存 檔案儲存 物件儲存物件
- 最佳實踐:使用阿里雲CDN加速OSS訪問阿里
- 阿里雲OSS專案搭建筆記阿里筆記
- 阿里雲OSS同城冗餘儲存正式商業化,提供雲上同城容災能力阿里
- 阿里雲檔案儲存CPFS正式商業化,提供雲上高效能並行檔案系統阿里並行
- 使用 Docker 搭建 minio 檔案儲存Docker
- 檔案儲存
- 資料儲存--檔案儲存
- 阿里雲PolarDB及其共享儲存PolarFS技術實現分析(下)阿里
- 阿里雲PolarDB及其共享儲存PolarFS技術實現分析(上)阿里
- C#使用HttpClient上傳檔案至阿里雲oss失敗的解決方案。C#HTTPclient阿里
- 一個基於SpringBoot+阿里雲OSS的簡單圖床專案Spring Boot阿里圖床
- 杉巖牽手阿里雲,混合雲端儲存生根發芽阿里
- 阿里雲釋出Apsara SA系列混合雲端儲存陣列阿里陣列
- 阿里雲oss配置:阿里
- OSS物件儲存的檔案追加上傳問題及解決方案物件
- 實現基於zoom平臺上的oss額外儲存OOM