摘要:但是很多企業(yè)項(xiàng)目因?yàn)楦鞣N需求,還是會(huì)要求圖片服務(wù)部署在內(nèi)部。所以我們還是可能會(huì)需要一個(gè)可獨(dú)立部署的圖片服務(wù)。注意,這種啟動(dòng)模式僅限于測(cè)試環(huán)境下,一旦命令終止,數(shù)據(jù)將會(huì)消失。
多數(shù)應(yīng)用系統(tǒng)都會(huì)用到圖片存儲(chǔ),從系統(tǒng)架構(gòu)角度來說,像圖片存儲(chǔ)這樣的服務(wù)應(yīng)該盡量從核心業(yè)務(wù)中剝離出來。很多人會(huì)選擇在線云存儲(chǔ)服務(wù),比如七牛云存儲(chǔ)之類的。但是很多企業(yè)項(xiàng)目因?yàn)楦鞣N需求,還是會(huì)要求圖片服務(wù)部署在內(nèi)部。所以我們還是可能會(huì)需要一個(gè)可獨(dú)立部署的圖片服務(wù)。
自己開發(fā)實(shí)現(xiàn)一套圖片存儲(chǔ)服務(wù)系統(tǒng),會(huì)花不少功夫,但如果有現(xiàn)成的方案何樂而不為呢?我在Github上發(fā)現(xiàn)Minio和Thumbor這兩個(gè)項(xiàng)目可以幫我們達(dá)成需求。
MinioMinio Cloud Storage是一個(gè)分布式對(duì)象存儲(chǔ)系統(tǒng)。它是一個(gè)基于Go的開源項(xiàng)目,并且實(shí)現(xiàn)了Amazon S3的API。也就是說Minio相當(dāng)于一個(gè)開源的Amazon S3。
使用docker安裝可能是最省事的方式,兩行命令即可安裝下載并且運(yùn)行起來。注意,這種啟動(dòng)模式僅限于測(cè)試環(huán)境下,一旦命令終止,數(shù)據(jù)將會(huì)消失。生產(chǎn)環(huán)境下的安裝部署請(qǐng)參考文檔。
docker pull minio/minio docker run -p 9000:9000 minio/minio server /export
啟動(dòng)之后,命令行中就會(huì)顯示一堆系統(tǒng)信息。
Endpoint: http://172.17.0.2:9000 http://127.0.0.1:9000 AccessKey: PT7TIDXEV7KH7S5R91JH SecretKey: 17hdYH0mF2Ljd3ahZ7JGyi5l/ZPjunLlldUMY/A0 Region: us-east-1 SQS ARNs:
之后就可以在瀏覽器中訪問 http://127.0.0.1:9000 并且使用AccessKey和SecretKey登錄。
其核心功能很簡單,創(chuàng)建bucket,上傳文件。其所有的文件鏈接都是含有過期時(shí)間的私有鏈接。然后我們就可以使用其提供的SDK使用了,就是這么簡單。
minio專注于文件存儲(chǔ),并沒有什么圖片處理功能,但是我們可以使用thumbor這個(gè)服務(wù)來做圖片處理。
ThumborThumbor是一個(gè)非常強(qiáng)大的圖片處理服務(wù),可以實(shí)現(xiàn)圖片裁剪、縮放、濾鏡,甚至是人臉識(shí)別。
它是一個(gè)基于Python的開源項(xiàng)目,在python環(huán)境下可以通過pip安裝。
pip install thumbor
然后使用下面命令即可運(yùn)行。
thumbor-config > ./thumbor.conf # 生成配置文件 thumbor --port=8888 --conf=thumbor.conf
該服務(wù)運(yùn)行在本地的8888端口,之后可以就可以直接通過url調(diào)用服務(wù)了。
比如這張圖片 https://www.apple.com/cn/home/images/gallery/iphone_alt_small_2x.jpg
就可以使用 http://localhost:8888/unsafe/300x200/https://www.apple.com/cn/home/images/gallery/iphone_alt_small_2x.jpg 這個(gè)url使其縮放到300x200大小。
Thumbor AWSThumbor處理圖片很強(qiáng)大,但是只提供了很弱的圖片存儲(chǔ)功能。其圖片上傳修改接口沒有做驗(yàn)證,所以默認(rèn)情況下沒有開啟。但是Thumbor有一些社區(qū)支持,第三方開發(fā)者做了一些擴(kuò)展。其中Thumbor AWS 這個(gè)擴(kuò)展可以把Thumbor后端跟Amazon S3整合起來。在url上提交圖片文件的key,Thumbor的后端會(huì)從Amazon S3中取出文件做處理。而之前Minio兼容Amazon S3的Api。所以意味著只需要做一點(diǎn)改動(dòng),就可以整合這兩個(gè)服務(wù)。最終就可以達(dá)成,利用Minio上傳存儲(chǔ)圖片,利用Thumbor取出圖片做處理。
我們利用pip來安裝這個(gè)擴(kuò)展。
pip install tc_aws
Thumbor AWS這個(gè)擴(kuò)展利用Boto3連接Amazon S3的SDK,根據(jù)Boto3文檔中的配置,我們需要?jiǎng)?chuàng)建 ~/.aws/credentials 這個(gè)文件,并且填寫剛才Minio提供的AccessKey和SecretKey,授權(quán)這個(gè)服務(wù)訪問Minio。
[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY
之后在剛才利用thumbor_conf生成的thumbor.conf中修改一些配置。
TC_AWS_REGION="us-east-1" #填寫minio提供的Region TC_AWS_ENDPOINT="http://127.0.0.1:9000" #將默認(rèn)的Amazon S3地址換成minio運(yùn)行地址 LOADER = "tc_aws.loaders.s3_loader" #將Thumbor的loader換成tc_aws.loaders.s3_loader
重新啟動(dòng)Thumbor,然后就可以在瀏覽器中通過Thumbor訪問Minio中的圖片了。
比如,在Minio的docker這個(gè)bucket中上傳了一張aaa.jpg,然后我們就可以通過 http://localhost:8888/unsafe/docker/aaa.jpg 這個(gè)地址訪問到這張圖片的原圖。當(dāng)然,我們可以通過 http://localhost:8888/unsafe/300x200/docker/aaa.jpg 這種方式對(duì)這張圖片進(jìn)行300x200的縮放。
這樣我們就大功告成了。
總結(jié)各種服務(wù)都有其專精的一面,幸好Amazon S3在云服務(wù)API層面上形成了某種事實(shí)上的標(biāo)準(zhǔn),所以這點(diǎn)能夠幫助我們將一些服務(wù)整合在一起。
實(shí)現(xiàn)效果上來看,最終達(dá)成了圖片存儲(chǔ)和提取縮放需求,對(duì)于一些項(xiàng)目也足夠使用。不過圖片通過Thumbor處理后,其私有鏈接的屬性也沒了。這在一些要求高的企業(yè)服務(wù)項(xiàng)目中也是蠻尷尬的。
簡單看了下Thumbor的源碼,其圖片輸出是tornado實(shí)現(xiàn)的,相信有時(shí)間hack一下源碼,實(shí)現(xiàn)私有鏈接也不會(huì)太困難的。
Enjoy it!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26812.html
摘要:但是很多企業(yè)項(xiàng)目因?yàn)楦鞣N需求,還是會(huì)要求圖片服務(wù)部署在內(nèi)部。所以我們還是可能會(huì)需要一個(gè)可獨(dú)立部署的圖片服務(wù)。注意,這種啟動(dòng)模式僅限于測(cè)試環(huán)境下,一旦命令終止,數(shù)據(jù)將會(huì)消失。 多數(shù)應(yīng)用系統(tǒng)都會(huì)用到圖片存儲(chǔ),從系統(tǒng)架構(gòu)角度來說,像圖片存儲(chǔ)這樣的服務(wù)應(yīng)該盡量從核心業(yè)務(wù)中剝離出來。很多人會(huì)選擇在線云存儲(chǔ)服務(wù),比如七牛云存儲(chǔ)之類的。但是很多企業(yè)項(xiàng)目因?yàn)楦鞣N需求,還是會(huì)要求圖片服務(wù)部署在內(nèi)部。所以...
您知道如何在Vue中minio上傳文件(stream流和鏈接)嗎?現(xiàn)在就講解: 1、minio的安裝 不用做過多,直接使用npm或者cnpm下載即可 npmiminio--save //或者 cnpmiminio--save 2、minio.js文件 封裝了連接minio、文件上傳,文件刪除等方法 注:此文件中的url都是在minio設(shè)置了永久鏈接的基礎(chǔ)上 2.1連接mi...
想自建網(wǎng)盤但是又苦于數(shù)據(jù)太大,購買大存儲(chǔ)容量的VPS主機(jī)價(jià)格太貴?不妨試試ZPan自建網(wǎng)盤存儲(chǔ)。ZPan致力于打造一款不限速的網(wǎng)盤系統(tǒng),因此采用客戶端直連云存儲(chǔ)的方式進(jìn)行設(shè)計(jì),即它不支持本地存儲(chǔ),你的所有數(shù)據(jù)都是存在第三方存儲(chǔ)商那里。目前ZPan支持所有兼容S3協(xié)議的云存儲(chǔ)平臺(tái),包括阿里云OSS 、騰訊云COS 、七牛云Kodo 、Ucloud US3(暫不支持自動(dòng)設(shè)置CORS) 、華為云OBS ...
閱讀 2795·2023-04-26 01:47
閱讀 3600·2023-04-25 23:45
閱讀 2481·2021-10-13 09:39
閱讀 616·2021-10-09 09:44
閱讀 1806·2021-09-22 15:59
閱讀 2785·2021-09-13 10:33
閱讀 1733·2021-09-03 10:30
閱讀 667·2019-08-30 15:53