最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)器的性能,并且有時候這些圖片資源也要直接用在前端顯示當(dāng)中,所以放在應(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中獲取:github源碼地址

到此這篇關(guān)于SpringBoot使用阿里OSS實現(xiàn)文件云存儲的文章就介紹到這了,更多相關(guān)SpringBoot文件云存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Eclipse項目有紅感嘆號的解決方法

    Eclipse項目有紅感嘆號的解決方法

    這篇文章主要為大家詳細介紹了Eclipse項目有紅感嘆號的解決方法,給出了Eclipse項目有紅感嘆號的原因,以及如何解決?,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 一起來學(xué)習(xí)Java的棧和隊列

    一起來學(xué)習(xí)Java的棧和隊列

    這篇文章主要為大家詳細介紹了Java的棧和隊列,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • java使用三層架構(gòu)實現(xiàn)電影購票系統(tǒng)

    java使用三層架構(gòu)實現(xiàn)電影購票系統(tǒng)

    這篇文章主要為大家詳細介紹了java使用三層架構(gòu)實現(xiàn)電影購票系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 淺談Java中replace與replaceAll區(qū)別

    淺談Java中replace與replaceAll區(qū)別

    這篇文章主要介紹了Java中replace與replaceAll區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JSON.parseObject和JSON.toJSONString實例詳解

    JSON.parseObject和JSON.toJSONString實例詳解

    這篇文章主要為大家詳細介紹了JSON.parseObject和JSON.toJSONString實例,具有一定的參考價值,感興趣的朋友可以參考一下
    2018-06-06
  • Spring中的之啟動過程obtainFreshBeanFactory詳解

    Spring中的之啟動過程obtainFreshBeanFactory詳解

    這篇文章主要介紹了Spring中的之啟動過程obtainFreshBeanFactory詳解,在refresh時,prepareRefresh后,馬上就調(diào)用了obtainFreshBeanFactory創(chuàng)建beanFactory以及掃描bean信息(beanDefinition),并通過BeanDefinitionRegistry注冊到容器中,需要的朋友可以參考下
    2024-02-02
  • java中的executeQuery()方法使用

    java中的executeQuery()方法使用

    這篇文章主要介紹了java中的executeQuery()方法使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • spring.datasource.schema配置詳解

    spring.datasource.schema配置詳解

    本文主要介紹了spring.datasource.schema配置,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java使用遞歸解決算法問題的實例講解

    Java使用遞歸解決算法問題的實例講解

    遞歸算法的實質(zhì)是把問題分解成規(guī)模縮小的同類問題的子問題,然后遞歸調(diào)用方法來表示問題的解,這里我們就來看幾個Java使用遞歸解決算法問題的實例講解
    2016-06-06
  • SpringBoot整合Mybatis?LocalDateTime?映射失效的解決

    SpringBoot整合Mybatis?LocalDateTime?映射失效的解決

    這篇文章主要介紹了SpringBoot整合Mybatis?LocalDateTime?映射失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論

曲沃县| 新晃| 东乡县| 汉沽区| 望江县| 陆川县| 许昌市| 梁山县| 贵港市| 迁安市| 乐安县| 金湖县| 陆川县| 镇远县| 乌兰县| 七台河市| 南宫市| 交口县| 定襄县| 嘉义市| 黄陵县| 瑞丽市| 萨迦县| 祥云县| 封丘县| 历史| 景洪市| 濉溪县| 磴口县| 安塞县| 鄂伦春自治旗| 玉溪市| 襄汾县| 崇阳县| 陇川县| 新兴县| 天等县| 丰都县| 济阳县| 石家庄市| 鄂托克前旗|