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

從零搭建Spring Boot腳手架整合OSS作為文件服務器的詳細教程

 更新時間:2020年08月25日 10:38:59   作者:碼農(nóng)小胖哥  
這篇文章主要介紹了從零搭建Spring Boot腳手架整合OSS作為文件服務器的詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1. 前言

文件服務器是一個應用必要的組件之一。最早我搞過FTP,然后又用過FastDFS,接私活的時候我用MongoDB也湊合湊合?,F(xiàn)如今時代不同了,開始流行起了OSS。

Gitee: https://gitee.com/felord/kono day06 分支 歡迎Star

GitHub: https://github.com/NotFound403/kono day06 分支 歡迎Star

2. 什么是OSS

全稱為Object Storage Service,也叫對象存儲服務,是一種解決和處理離散單元的方法,可提供基于分布式系統(tǒng)之上的對象形式的數(shù)據(jù)存儲服務,具有可拓展、可管理、低成本等特點,支持中心和邊緣存儲,能夠?qū)崿F(xiàn)存儲需求的彈性伸縮,主要應用于海量數(shù)據(jù)管理的各類場景。

這概念真是夠難以理解的。簡單說點我知道的吧,平常我們的文件地址都是 /User/felord/video/xxx.mp4的目錄樹結(jié)構(gòu),系統(tǒng)先要找到User,然后一級一級往下找一直到目標為止,這是一種結(jié)構(gòu)化的存儲方式。對象存儲就不一樣了,所有的文件都放在一個特定的池子里,只不過文件的攜帶有它自己的元信息,通過元信息去檢索文件。這里舉一個形象的例子:

{"oss":[
 {"file":"xxxxx","meta":{"id":"1111"},"type":""},
 {"content":"xxxxx","meta":{"id":"1211"},"type":"","created":"","name":""}, 
]}

上圖的oss就是一個對象存儲,它里面存了攜帶信息不一樣、甚至結(jié)構(gòu)都不一樣的東西,我們可以根據(jù)其元信息meta檢索它們。OSS具有以下特點:

  • 效率更高。不受復雜目錄系統(tǒng)對性能的影響。
  • 可擴展性更強。
  • 分布式架構(gòu),更便于進行水平擴展,從而容納進任意大規(guī)模的數(shù)據(jù)。
  • 可用性更強。
  • 數(shù)據(jù)一般都會有多個位于不同機器的復制,確保數(shù)據(jù)不丟失。
  • 平臺無關(guān),可以通過Restful接口進行操作對象。

OSS通常被用來存儲圖片、音視頻等文件,以及對這些文件的處理。

3. 哪些OSS可以使用

通常我們有兩種選擇,花錢買或者自己搞。

充錢才能變得更強

這句話這里也是很實用的,目前幾乎所有的云廠商都有自己的對象存儲產(chǎn)品,你可以對比一下花錢購買它們,通過配合CDN能達到非常好的用戶體驗,胖哥的felord.cn就使用了云廠商的對象存儲。購買他們的服務

  • 可靠性強,數(shù)據(jù)丟失可能性低。
  • 免維護,不需要自行維護。
  • 可配合其它一些特色功能,比如縮略圖、CDN等等。

自己動手豐衣足食

不想花錢就只能自己動手了,目前我知道的開源方案有兩種。

一種是Ceph,一個分布式存儲系統(tǒng),高可用,高擴展性。但是一般人玩不轉(zhuǎn),就連開源中國的紅薯都被坑慘了😆。

另一種是Minio,用Golang寫的。我目前還沒發(fā)現(xiàn)有什么坑,文檔居然還有中文文檔!我用Docker不到三分鐘就玩起來了,居然還自帶控制臺!其它功能也挺齊全,各種客戶端SDK齊全。

因為安裝過于簡單就不演示了。

4. 整合到Spring Boot

無論你花錢還是自己搞都可以,這兩種方式各有各的好處。所以我要把這兩種方式整合到kono Spring Boot腳手架項目中。這種組件封裝成為Spring Boot Starter再好不過了。在日常開發(fā)中這種基礎(chǔ)組件都建議做成Starter。參考我的 最強自定義Spring Boot Starter教程里的方式,我將aliyun的OSS SDK和Minio SDK封裝成Starter了。

達到了開箱即用。而且非常靈活,你配置哪種使用哪種,可以二選一,也可以全都要,還可以全都不要。

項目地址: https://gitee.com/felord/oss-spring-boot.git。

獲取到項目后通過Maven命令mvn install安裝到本地依賴庫,或者你發(fā)布到你的遠程私有Maven倉庫。然后再引用Starter,切記先后步驟:

<!-- 一定要先拉取項目通過 mvn install 安裝到本地 -->
<dependency>
 <groupId>cn.felord</groupId>
 <artifactId>oss-spring-boot-starter</artifactId>
 <version>1.0.0.RELEASE</version>
</dependency>

Minio配置流程

接著就是使用了,先在你Minio的控制臺上創(chuàng)建一個bucket,可以理解為一個對象池。

然后把策略設(shè)置為可讀寫。

搞完開始在項目中配置,application.yaml中:

oss:
 minio:
 # 啟用 
 active: true 
 access-key: minio_access_key
 secret-key: felord_cn_sec_key
 # minio 地址 
 endpoint: http://localhost:9000

aliyun OSS 配置流程

額外引入依賴:

<dependency>
 <groupId>com.aliyun.oss</groupId>
 <artifactId>aliyun-sdk-oss</artifactId>
 <version>2.5.0</version>
</dependency>
<dependency>
 <groupId>com.aliyun</groupId>
 <artifactId>aliyun-java-sdk-core</artifactId>
 <version>4.3.8</version>
</dependency>

這是必須的步驟。

去ali OSS控制臺申請跟Minio差不多的幾樣東西用來配置:

oss:
 aliyun:
 active: true
 access-key-id: LTAI4GH4EQXtKEbJDrADvWNH
 access-key-secret: XjDpNn5JqHAHPDXGL6xIebyUkyFAZ7
 endpoint: oss-cn-beijing.aliyuncs.com

Starter的使用

以下是我對OSS操作的抽象接口:

package cn.felord.oss;

import java.io.InputStream;

/**
 * The interface Storage.
 *
 * @author felord.cn
 * @since 2020 /8/24 19:54
 */
public interface Storage {


 /**
  * 存放對象
  *
  * @param bucketName bucket 名稱
  * @param objectName 自定義對象名稱
  * @param inputStream 對象的輸入流
  * @param contentType 參考http 的 MimeType 值
  * @throws Exception the exception
  */
 void putObject(String bucketName, String objectName, InputStream inputStream, String contentType) throws Exception;

 /**
  * 獲取對象
  *
  * @param bucketName the bucket name
  * @param objectName the object name
  * @return the object
  */
 InputStream getObject(String bucketName, String objectName) throws Exception;

 /**
  * 獲取對象的URL
  *
  * @param bucketName the bucket name
  * @param objectName the object name
  * @return the object url
  */
 String getObjectUrl(String bucketName, String objectName) throws Exception;

 /**
  * 刪除對象
  *
  * @param bucketName the bucket name
  * @param objectName the object name
  */
 void removeObject(String bucketName, String objectName) throws Exception;

}

然后分別使用了以上兩種OSS進行了實現(xiàn)。

并分別以aliyunStorage、minioStorage為名稱將AliyunStorageMinioStorage注入Spring IoC。

使用起來非常簡單:

@Autowired
@Qualifier("minioStorage")
Storage storage;

@Test
public void testOss() throws Exception {
 File file = new File("./456.jpg");

 InputStream inputStream = new FileInputStream(file);

 storage.putObject("img","pic_122",inputStream, MimeTypeUtils.IMAGE_JPEG_VALUE);
}

5. 總結(jié)

今天的整合與往常不太一樣,主要是一些通用功能的組件化封裝的實際演示,另外簡單描述了對象存儲的功能和使用場景,希望對你有用。

到此這篇關(guān)于從零搭建Spring Boot腳手架整合OSS作為文件服務器的詳細教程的文章就介紹到這了,更多相關(guān)Spring Boot整合OSS文件服務器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合ActiveMQ的詳細步驟

    SpringBoot整合ActiveMQ的詳細步驟

    昨天仔細研究了activeMQ消息隊列,也遇到了些坑,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合ActiveMQ的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Java模擬實現(xiàn)QQ三方登錄(單點登錄2.0)

    Java模擬實現(xiàn)QQ三方登錄(單點登錄2.0)

    這篇文章主要為大家詳細介紹了Java模擬實現(xiàn)QQ三方登錄,單點登錄2.0,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Java?LocalDateTime常用操作方法

    Java?LocalDateTime常用操作方法

    這篇文章主要介紹了Java?LocalDateTime實用方法,Java8提供了新的時間接口LocalDateTime,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • SpringSecurity框架下實現(xiàn)CSRF跨站攻擊防御的方法

    SpringSecurity框架下實現(xiàn)CSRF跨站攻擊防御的方法

    CSRF是一種網(wǎng)絡(luò)攻擊方式,也可以說是一種安全漏洞,這種安全漏洞在web開發(fā)中廣泛存在。這篇文章主要介紹了SpringSecurity框架下實現(xiàn)CSRF跨站攻擊防御,需要的朋友可以參考下
    2019-12-12
  • 聊聊spring @Transactional 事務無法使用的可能原因

    聊聊spring @Transactional 事務無法使用的可能原因

    這篇文章主要介紹了spring @Transactional 事務無法使用的可能原因,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 關(guān)于java獲取新浪天氣示例

    關(guān)于java獲取新浪天氣示例

    這篇文章主要介紹了關(guān)于java獲取新浪天氣示例,新浪的接口可以直接通過城市名字查詢天氣所以這里使用新浪API,,需要的朋友可以參考下
    2023-04-04
  • 詳解JAVA中接口的定義和接口的實現(xiàn)

    詳解JAVA中接口的定義和接口的實現(xiàn)

    這篇文章主要介紹了JAVA中接口的定義和接口的實現(xiàn),文中講解非常細致,配合代碼更好的幫大家學習參考,感興趣的朋友可以了解下
    2020-06-06
  • HashMap之keyset()方法底層原理解讀

    HashMap之keyset()方法底層原理解讀

    這篇文章主要介紹了HashMap之keyset()方法底層原理解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • idea中寫sql語句沒有提示字段的問題

    idea中寫sql語句沒有提示字段的問題

    在IDEA中編寫SQL時如果沒有字段提示,通常是因為沒有設(shè)置注入語言,解決方法是通過快捷鍵Alt+Enter選擇“注入語言或引用”,然后選擇相應的數(shù)據(jù)庫(如MySQL),之后重新輸入SQL語句即可,此方法可以有效解決IDEA中SQL語句提示問題,提高開發(fā)效率
    2024-09-09
  • IDEA無法使用Git?Pull的問題

    IDEA無法使用Git?Pull的問題

    本文主要介紹了IDEA無法使用Git?Pull的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02

最新評論

江川县| 兰溪市| 贺兰县| 麟游县| 福贡县| 阿克| 逊克县| 台山市| 平舆县| 清远市| 孟津县| 墨脱县| 驻马店市| 汉源县| 浮梁县| 德安县| 大埔区| 玉屏| 雅安市| 阿克苏市| 贡嘎县| 通河县| 禄丰县| 潼关县| 兴城市| 封丘县| 苍梧县| 定日县| 武功县| 门头沟区| 龙岩市| 禹州市| 南宁市| 灵璧县| 通江县| 邓州市| 吉水县| 垣曲县| 手机| 宜宾市| 湘阴县|