SpringBoot使用阿里OSS實現(xiàn)文件云存儲的方法
前言
我們在項目中經(jīng)常會使用到圖片或者文檔資源,一般來說如何這類文件比較少的時候我們可以直接存在在服務(wù)器中,但是如果一旦這些文件到達一定數(shù)量的時候如果在放在應(yīng)用服務(wù)器必然會影響應(yīng)用服務(wù)器的性能,并且有時候這些圖片資源也要直接用在前端顯示當中,所以放在應(yīng)用服務(wù)器也是不妥的。一些比較大的互聯(lián)網(wǎng)公司可能會使用一些分布式文件系統(tǒng)來達到存儲文件的目的,但這種方式門檻過高。如何找到一個合適且性價比高的文件存儲方式呢?那么不得不說的就是對象存儲服務(wù)OSS
.
FastDFS分布式文件系統(tǒng)可參考我的博客:FastDFS分布式文件系統(tǒng)
正文
對象存儲服務(wù)
對象存儲服務(wù)(OSS
):是一種海量、安全、低成本、高可靠的云存儲服務(wù),適合存放任意類型的文件:
OSS
可用于圖片、音視頻、日志等海量文件的存儲。- 各種終端設(shè)備、
Web
網(wǎng)站程序、移動應(yīng)用可以直接向OSS
寫入或讀取數(shù)據(jù)。 OSS
支持流式寫入和文件寫入兩種方式。
簡單地來說,我們通過OSS
可以避免在服務(wù)器中存儲大量的文件、圖片等資源增加服務(wù)器的IO
的讀寫帶寬。
SpringBoot使用阿里OSS實現(xiàn)文件云存儲 前期準備
第一步:在阿里云商城購買對象存儲服務(wù)
第二步:在阿里云控制臺配置AccessKey
代碼部分
maven依賴
<!--oss對象關(guān)系存儲--> <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公網(wǎng)路徑"; 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) { // 創(chuàng)建上傳Object的Metadata ObjectMetadata meta = new ObjectMetadata(); // 必須設(shè)置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; } //執(zhí)行刪除 client.deleteObject(bucket, fileName); return true; } /** * 獲得上傳文件后url鏈接 * * @param fileName 文件名(包括文件夾名稱和“/”) * @return */ public static String getUrl(String fileName) { // 設(shè)置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; } /** * 創(chuàng)建存儲空間 * * @param bucketName 新建存儲空間默認為標準存儲類型,私有權(quán)限。 * @return */ public static void crateBucket(String bucketName) { // 新建存儲空間默認為標準存儲類型,私有權(quán)限。 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中獲?。?a target="_blank" >github源碼地址
到此這篇關(guān)于SpringBoot使用阿里OSS實現(xiàn)文件云存儲的文章就介紹到這了,更多相關(guān)SpringBoot文件云存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Boot?教程之創(chuàng)建項目的三種方式
這篇文章主要分享了Spring?Boot?教程之創(chuàng)建項目的三種方式,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05SpringMVC訪問靜態(tài)資源的三種方式小結(jié)
這篇文章主要介紹了SpringMVC訪問靜態(tài)資源的三種方式小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02解決Required request body is missing錯誤的問題
這篇文章主要介紹了解決Required request body is missing錯誤的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06微信公眾號 網(wǎng)頁授權(quán)登錄及code been used解決詳解
這篇文章主要介紹了微信公眾號 網(wǎng)頁授權(quán)登錄及code been used解決詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07