圖片存儲(chǔ)和如何返回給前端
前言:
了不起學(xué)弟:了不起學(xué)長,最近我開發(fā)遇到了關(guān)于存儲(chǔ)圖片和返回給圖片給前端的相關(guān)內(nèi)容,我不太會(huì),可以給我講講嗎?了不起:可以,這塊其實(shí)不難,你學(xué)過幾次就可以了。
正文:
一般來說,我們圖片存儲(chǔ)都會(huì)存儲(chǔ)在專門的對(duì)象存儲(chǔ)服務(wù)器上。常見的有阿里云oss,七牛云,華為云等等。像這些對(duì)象存儲(chǔ),一般都會(huì)有bucket(桶)的概念,和對(duì)象的概念。
你的項(xiàng)目一般都會(huì)有自己的一個(gè)桶,你就可以去桶內(nèi)存儲(chǔ)你要存儲(chǔ)的對(duì)象。桶和對(duì)象都是有自己的權(quán)限,這個(gè)需要你自己通過后臺(tái)或者接口去設(shè)置acl。
對(duì)于前端需要上傳的圖片,我們后端通過MultipartFile 去接受圖片,然后通過阿里云的接口去把圖片上傳就可以了。
同時(shí)要注意,上傳圖片通過我們的接口,我們需要去校驗(yàn)文件的真實(shí)性,大小。如果沒有這層校驗(yàn),不管是從業(yè)務(wù)的角度,還是安全的角度,都是不可取的。
上傳完圖片,我們可以在相應(yīng)的云上獲取到圖片的鏈接。通過這個(gè)鏈接我們就有以下幾種方式去返回給前端了。
第一種:url可以直接返回給前端,讓頁面自己去加載圖片。這種方式是最方便的。
第二種,后端通過url去獲取到圖片,然后通過HttpServletResponse.getOutPutStream ,再OutPutStream.write。
通過輸出流的方式把圖片給前端。這種方式比第一種方式要復(fù)雜一點(diǎn),適合文件下載接口。記得流處理完了要把流關(guān)閉。
第三種方式:一些比較固定的圖片,比如logo,固定的背景。我們?cè)偻ㄟ^url獲取到圖片之后,通過Base64.getEncoder().encodeToString(byte)的方式,把圖片轉(zhuǎn)化成base64返回給前端。
這種方式適合一些固定圖片的場景,不太適合圖片太多的場景,對(duì)于前端來說有過多的base64不太合適。
溫馨提示:對(duì)于一些圖片需要用戶主動(dòng)去上傳,并且會(huì)展示出來的圖片,切記要進(jìn)行第三方的對(duì)圖片的安全檢查。
了不起所在公司的一個(gè)小組,就因?yàn)槌霈F(xiàn)過用戶上傳頭像,頭像非法,然后被公安約談的情況。圖片的不僅僅需要格式校驗(yàn),圖片內(nèi)容也是需要進(jìn)行安全校驗(yàn)的。
講到這里大家也就明白了,圖片上傳的前后邏輯。對(duì)于圖片上傳,大家了解了,其他的文件也是同樣的道理,圖片,文件,視頻等等都是一樣的。
對(duì)于一些大一點(diǎn)的視頻圖片,可能也會(huì)涉及到分段上傳,云都會(huì)有相應(yīng)的api提供給大家。