項(xiàng)目需要上傳頭像,不想存在本地,之前用過(guò)阿里云其他產(chǎn)品,這里就使用一下阿里云的oss了,不得不說(shuō)阿里云的產(chǎn)品使用步驟真的很清晰.這里說(shuō)一下我自己的使用步驟.
專注于為中小企業(yè)提供成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)隆回免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
選擇對(duì)象存儲(chǔ)oss,進(jìn)行開(kāi)通
開(kāi)通不要錢,有一定免費(fèi)額度
權(quán)限可以設(shè)置為公共讀
其實(shí)也就是兩步
1.引pom
2.復(fù)制黏貼大法
由于阿里云一些密鑰配置和地域結(jié)點(diǎn),bucket等是常量級(jí)的,所以我這里抽取出來(lái)放在了application.properties中, 方便管理 ,數(shù)據(jù)我手動(dòng)加密了....大家換成自己的即可,
這些配置key=value key都是自己隨便寫的(也不是,起碼可以見(jiàn)名思意),只是為了我們配置的一個(gè)配置類可以利用spring的依賴注入填充value而已
說(shuō)明:
說(shuō)明:
我們阿里云oss倉(cāng)庫(kù)的url是一個(gè)咱們的倉(cāng)庫(kù)+固定的地域結(jié)點(diǎn)值+咱們的文件名字,所以這里為了使上傳的文件名字不重復(fù),使用了一個(gè)idworker,不知道的可以看一下 Twitter的 Snowflake(雪花算法)
大家搭建完了可以用postman測(cè)試一下
ps:如果我們想方便管理或者后期擴(kuò)展,我們這里也可以引入一個(gè)工具
我們可以用這個(gè)工具的一個(gè)方法String dirpath=new DateTime().tostring("yyyy/MM/dd");將當(dāng)前的時(shí)間轉(zhuǎn)換為yyyy/MM/dd的格式,比如2020/02/03
這樣我們上傳的文件名字時(shí)候可以以這個(gè)dirpath作為我們的圖片所在的文件夾名稱,以分布式id生成器生成的id為名稱存儲(chǔ).
下面看一下效果
最近公司有新的需求,需要將文件上傳到阿里云OSS,目前項(xiàng)目中的文件主要是存儲(chǔ)到自己的服務(wù)器,這樣很容易受服務(wù)器帶寬、硬件的影響,加上服務(wù)器配置不高,應(yīng)用服務(wù)很容易垮掉。之前也用過(guò)OSS,但是上傳文件都是比較小的10MB以內(nèi)的文件,采用的是生成數(shù)據(jù)流的方式。這種情況已經(jīng)無(wú)法滿足現(xiàn)在的應(yīng)用場(chǎng)景,就又熟悉了一下SDK文檔,主要的實(shí)現(xiàn)方式有:
1、 上傳慢。先上傳到應(yīng)用服務(wù)器,再上傳到OSS,網(wǎng)絡(luò)傳送多了一倍。如果數(shù)據(jù)直傳到OSS,不走應(yīng)用服務(wù)器,速度將大大提升,而且OSS是采用BGP帶寬,能保證各地各運(yùn)營(yíng)商的速度。
2、 擴(kuò)展性不好。如果后續(xù)用戶多了,應(yīng)用服務(wù)器會(huì)成為瓶頸。
3、 費(fèi)用高。由于OSS上傳流量是免費(fèi)的。如果數(shù)據(jù)直傳到OSS,不走應(yīng)用服務(wù)器,那么將能省下幾臺(tái)應(yīng)用服務(wù)器。
采用JavaScript客戶端直接簽名(參見(jiàn) JavaScript客戶端簽名直傳 )時(shí),AccessKey ID和AcessKey Secret會(huì)暴露在前端頁(yè)面,因此存在嚴(yán)重的安全隱患。因此,OSS提供了服務(wù)端簽名后直傳的方案。
流程如下圖所示:
本示例中,Web端向服務(wù)端請(qǐng)求簽名,然后直接上傳,不會(huì)對(duì)服務(wù)端產(chǎn)生壓力,而且安全可靠。但本示例中的服務(wù)端無(wú)法實(shí)時(shí)了解用戶上傳了多少文件,上傳了什么文件。如果想實(shí)時(shí)了解用戶上傳了什么文件,可以采用 服務(wù)端簽名直傳并設(shè)置上傳回調(diào) 。
OSS 可以通過(guò)阿里云 STS (Security Token Service) 進(jìn)行臨時(shí)授權(quán)訪問(wèn)。阿里云 STS 是為云計(jì)算用戶提供臨時(shí)訪問(wèn)令牌的Web服務(wù)。通過(guò) STS,您可以為第三方應(yīng)用或子用戶(即用戶身份由您自己管理的用戶)頒發(fā)一個(gè)自定義時(shí)效和權(quán)限的訪問(wèn)憑證。
STS 安全令牌、角色管理和使用相關(guān)內(nèi)容詳情,請(qǐng)參考 RAM 角色管理 。調(diào)用 STS 服務(wù)接口 AssumeRole 來(lái)獲取有效訪問(wèn)憑證即可。
前端調(diào)用,請(qǐng)根據(jù)自身情況進(jìn)行調(diào)用,下面是vue的示例
我們?cè)陧?xiàng)目中最終采用的是STS臨時(shí)授權(quán)方案。
STS的優(yōu)勢(shì)如下:
關(guān)于STS的介紹請(qǐng)查閱阿里云官方文檔:
在這邊不得不吐槽一下OSS的API,是真的很爛,基本找不到好的方法,都是基于百度才做出來(lái)的,當(dāng)然,我使用的方法估計(jì)還有一些坑,只是能實(shí)現(xiàn)了我的功能。
STS臨時(shí)授權(quán)訪問(wèn)OSS
vue直傳OSS
el-upload組件結(jié)合上傳阿里云OSS實(shí)現(xiàn)更優(yōu)交互
Web直傳OSS
OSS文件上傳(頁(yè)面直傳)
請(qǐng)問(wèn)STS和簽名帶Policy的差別
STS臨時(shí)授權(quán)訪問(wèn)OSS
vue+element+sts臨時(shí)授權(quán)上傳大文件到阿里云OSS時(shí)踩過(guò)的坑。
Vue上傳阿里云OSS(STS方式)
ECS是云服務(wù)器
RDS是云數(shù)據(jù)庫(kù)
OSS是對(duì)象存儲(chǔ)
SLB是負(fù)載均衡
使用第三方的阿里云OOS來(lái)當(dāng)文件服務(wù)器使用,穩(wěn)定性相對(duì)來(lái)說(shuō)比較高,容災(zāi)也方便。
官方參考地址:
resource下新建配置文件 file.properties
FastDFSService
FastDFSServiceImpl
FastDFSController