前言
閑來無事,搭建了個人私倉來放模塊化項(xiàng)目涩拙,以便項(xiàng)目引入直接使用。關(guān)鍵是婆誓,模塊化可以根據(jù)項(xiàng)目所需進(jìn)行版本迭代吃环,每一次的使用都是完善的根基也颤,效果賊棒洋幻。
介紹
七牛云是國內(nèi)領(lǐng)先的企業(yè)級公有云服務(wù)商,致力于打造以數(shù)據(jù)為核心的場景化PaaS服務(wù)翅娶。圍繞富媒體場景文留,七牛先后推出了對象存儲,融合CDN加速竭沫,數(shù)據(jù)通用處理燥翅,內(nèi)容反垃圾服務(wù),以及直播云服務(wù)等蜕提。
而此次推出的模塊化森书,目的是為了滿足項(xiàng)目存儲圖片的需求,才有了此番封模塊化的構(gòu)思谎势。
話不多說...進(jìn)入主題吧凛膏!
模塊化說明文檔
一、上傳交互方式(兩種)
- 前端上傳(推薦方式)
客戶端在上傳資源到七牛云前脏榆,要先從業(yè)務(wù)服務(wù)器獲取一個有效的上傳憑證Token猖毫,即請求相應(yīng)項(xiàng)目的七牛云接口拿到Token,
接著使用Token調(diào)用前端上傳七牛云的api须喂,上傳文件至七牛云吁断,返回?cái)?shù)據(jù)(得到圖片URl趁蕊,即可傳給后臺存儲)。
PS:如果有設(shè)置回調(diào)仔役,則上傳完成時七牛云存儲會自動發(fā)起回調(diào)到指定的業(yè)務(wù)服務(wù)器掷伙。
- 后臺上傳
單圖上傳 & 多圖上傳
老規(guī)矩,后臺項(xiàng)目會依賴七牛云模塊又兵,前端需請求相應(yīng)后臺接口炎咖,參數(shù)傳File文件(當(dāng)多圖片時為數(shù)組),后臺將會直接上傳文件至七牛云寒波,并存儲至數(shù)據(jù)庫乘盼。
二、配置需知
一般不變配置:accessKey俄烁,secretKey
可變配置:bucket绸栅,key,expires页屠,policy粹胯,strict
三、返回token情況分析
1.提供空間名bucket辰企,其余默認(rèn)
String getToken(String bucket)
2. 提供空間名bucket风纠,上傳指定key,其余默認(rèn)
String getToken(String bucket, String key)
3. 提供空間名bucket牢贸,上傳指定key竹观,有效時長expires,上傳策略policy(詳見官方SDK上傳策略)
String getToken(String bucket, String key, long expires, StringMap policy)
4. 提供空間名bucket潜索,上傳指定key臭增,有效時長expires,上傳策略policy竹习,是否去除非限定的策略字段strict
String getToken(String bucket, String key, long expires, StringMap policy, boolean strict)
注:
后期將會迭代部分
七牛模塊化會添加多種動態(tài)配置參數(shù)獲取token誊抛,因此,暫時是默認(rèn)參數(shù)獲取token整陌,不過拗窃,足夠使用了。
模塊化使用文檔
Maven依賴七牛云
pom.xml
<dependency>
<artifactId>qiniu</artifactId>
<groupId>com.yuan.module</groupId>
<version>1.0.0</version>
</dependency>
注:隨著七牛模塊的迭代泌辫,version會不同随夸,但我會實(shí)時更新文檔,并注上各版本的迭代內(nèi)容~~~
配置文件
application.yml
覆蓋accessKey甥郑,secretKey逃魄,linkAddress,bucket澜搅。
按如下配置格式配置伍俘,填充相關(guān)信息即可邪锌。
joryun:
module:
qiniu:
bucket: xxx
access-key: xxx
secret-key: xxx
link-address: xxx
注意
- linkAddress為默認(rèn)外鏈域名,項(xiàng)目需要配置癌瘾,否則無法訪問觅丰。(不同的bucket對應(yīng)的外鏈也不同)
- 務(wù)必要覆蓋如上配置,否則上傳的圖片資源妨退,將會存在博主的七牛云上
- 坑點(diǎn):bucket的創(chuàng)建需注意妇萄,可能會存在區(qū)域的問題,一般廣東用戶可選擇創(chuàng)建“華南”地區(qū)
- 溫馨提示:以上配置中咬荷,joryun 是博主的英文名冠句,最好是copy到項(xiàng)目,免得拼錯
API(接口調(diào)用)
前端上傳(推薦方式)
- 返回Token給前端
http://server_name:port/api/module/qiniu/token
- 調(diào)用前端與七牛交互的API幸乒,帶著Token憑證上傳
后端上傳(推薦方式)
- 單圖上傳
http://server_name:port/api/module/qiniu/one
Param:MultipartFile file (單個file)
- 多圖上傳
http://server_name:port/api/module/qiniu/many
Param:MultipartFile[] files (file數(shù)組)
- 后端文件上傳懦底,流方式
http://server_name:port/api/module/qiniu/stream
- 后端文件上傳,字節(jié)方式
http://server_name:port/api/module/qiniu/byte
拓展小知識
說明:
項(xiàng)目中有引用 swagger 依賴的罕扎,在前后端分離的架構(gòu)里聚唐,可能在七牛模塊化的使用成本上比較高。問題在于腔召,后臺引入了模塊化杆查,但swagger文檔里并無出現(xiàn)此接口,那就會加大時間上的溝通成本以及使用成本臀蛛,實(shí)為不利亲桦。
小技巧:
博主的七牛模塊化已引入了 swagger 依賴,為了減少前后端開發(fā)人員使用成本掺栅,可進(jìn)行如下配置烙肺,即可在 swagger 文檔看到此接口纳猪。
@Bean
public Docket swaggerSpringMvcPlugin() {
Parameter parameter = new ParameterBuilder()
.name("Authorization")
.description("token")
.modelRef(new ModelRef("string"))
.parameterType("header")
.required(false)
.defaultValue("token ")
.build();
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.globalOperationParameters(Collections.singletonList(parameter))
.select()
.apis(withClassAnnotation(Api.class))
.paths(paths())
.build();
}
主要是這一句配置:
.apis(withClassAnnotation(Api.class))
解析:
每個Controller都會加上如下注解氧卧,因此可由傳統(tǒng)的包掃描更改為注解掃描,于是便出現(xiàn)了七牛模塊化的接口文檔氏堤!
@Api(tags = "xxx")
總結(jié)
個人的項(xiàng)目里沙绝,七牛模塊化已基本足夠使用了。
按上面提供的使用文檔引入模塊化鼠锈,可以很方便地存儲圖片(為什么一直說存儲圖片呢...因?yàn)樽隽撕枚囗?xiàng)目闪檬,大多是存儲圖片需要)。
好了购笆,功能完善的項(xiàng)目并非一日功夫粗悯,需要時間一步步完善,但模塊化絕對是很好的一個idea同欠,甚至是思維样傍。閑著沒事做横缔,封些模塊化使用,可以一點(diǎn)點(diǎn)抽離項(xiàng)目服務(wù)衫哥,其實(shí)挺類似 服務(wù)提供者 暴露服務(wù)的茎刚。