欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot使用阿里OSS實現(xiàn)文件云存儲的方法

 更新時間:2020年10月28日 10:11:27   作者:溪源的奇思妙想  
這篇文章主要介紹了SpringBoot使用阿里OSS實現(xiàn)文件云存儲,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言

我們在項目中經(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)文章

  • java字符串拼接與性能分析詳解

    java字符串拼接與性能分析詳解

    在JAVA中拼接兩個字符串的最簡便的方式就是使用操作符”+”。如果你用”+”來連接固定長度的字符串,可能性能上會稍受影響,但是如果你是在循環(huán)中來”+”多個串的話,性能將指數(shù)倍的下降,下面我們分析一下JAVA字符串拼接的性能
    2014-01-01
  • Spring?Boot?教程之創(chuàng)建項目的三種方式

    Spring?Boot?教程之創(chuàng)建項目的三種方式

    這篇文章主要分享了Spring?Boot?教程之創(chuàng)建項目的三種方式,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Spring @Scheduled的坑及解決

    Spring @Scheduled的坑及解決

    這篇文章主要介紹了Spring @Scheduled的坑及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring中的依賴注入DI源碼詳細解析

    Spring中的依賴注入DI源碼詳細解析

    這篇文章主要介紹了Spring中的依賴注入DI源碼詳細解析,Spring的依賴注入(Dependency Injection,DI)是Spring框架核心的一部分,它是實現(xiàn)控制反轉(zhuǎn)(Inversion of Control,IoC)的一種方式,需要的朋友可以參考下
    2023-11-11
  • SpringMVC訪問靜態(tài)資源的三種方式小結(jié)

    SpringMVC訪問靜態(tài)資源的三種方式小結(jié)

    這篇文章主要介紹了SpringMVC訪問靜態(tài)資源的三種方式小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java實現(xiàn)五子棋游戲單機版(1.0)

    Java實現(xiàn)五子棋游戲單機版(1.0)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)五子棋游戲單機版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 解決Required request body is missing錯誤的問題

    解決Required request body is missing錯誤的問題

    這篇文章主要介紹了解決Required request body is missing錯誤的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java MongoDB實現(xiàn)REST過程解析

    Java MongoDB實現(xiàn)REST過程解析

    這篇文章主要介紹了Java MongoDB實現(xiàn)REST過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 詳解Java語言中的抽象類與繼承

    詳解Java語言中的抽象類與繼承

    這篇文章主要為大家詳細介紹了Java語言中的抽象類與繼承的相關(guān)資料,文中的示例代碼講解詳細,對我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴快跟隨小編一起了解一下
    2022-10-10
  • 微信公眾號 網(wǎng)頁授權(quán)登錄及code been used解決詳解

    微信公眾號 網(wǎng)頁授權(quán)登錄及code been used解決詳解

    這篇文章主要介紹了微信公眾號 網(wǎng)頁授權(quán)登錄及code been used解決詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07

最新評論