論壇或者貼吧經(jīng)常會需要分享很多圖片,上傳圖片比較差的做法是上傳到中央服務(wù)器上,中央服務(wù)器再轉(zhuǎn)發(fā)給靜態(tài)圖片服務(wù)器。而這篇文章講介紹如何使用plupload對上傳過程進(jìn)行優(yōu)化,并繞過服務(wù)器直接批量上傳圖片到又拍云上的方法。本文集中會講到以下幾個重點:
plupload庫
plupload是一個支持非常豐富的圖片上傳插件。可以對低版本的瀏覽器通過Flash/Silverligh/html4支持批量上傳,而在高版本瀏覽器中則會優(yōu)先使用html5接口上傳,這一切的判定都是自動的,可以說使用起來非常方便!其次plupload還支持在客戶端壓縮圖片、直接Drag&Drop來上傳等功能,具體大家就可以到它的官網(wǎng)上了解更多的信息。
在這里我們僅使用它的核心API,只需要引入一個文件即可。
官方給出的核心API例子非常簡單,可以直接移步http://www.plupload.com/examples/core查看。核心API在理解上不存在什么困難,如果需要幫助可以在本文后面向我提問。
圖片的本地壓縮
一般在網(wǎng)頁中瀏覽的圖片質(zhì)量需求不高,記得當(dāng)初高中上課學(xué)PS,老師說網(wǎng)上的圖片分辨率設(shè)72就好了,打印的圖片的話得設(shè)300。所以用戶在上傳一張很大的照片時,比較好的做法是現(xiàn)在用戶的客戶端本地壓縮好這張圖片,并把壓縮后較小的圖片上傳,既不影響瀏覽效果,同時也能加快上傳速度,減小服務(wù)器的負(fù)擔(dān)。
圖片的本地壓縮功能在plupload中是支持的,只要在初始化它的時候傳入一個resize參數(shù)就好了。其中,寬度和高度可以根據(jù)實際情況設(shè)置,而quality是比較重要的一個參數(shù),顧名思義,這個值設(shè)置得越小,圖片越小,但顯示的質(zhì)量也會越差,這個就需要你自己權(quán)衡一下啦。
多選圖片
批量上傳圖片的一個前置條件就是能夠多選圖片。多選文件是HTML5的一個標(biāo)準(zhǔn)特性,我們可以通過如下方式來開啟多選模式:
根據(jù)一個非常優(yōu)秀的jquery插件jQuery-File-Upload的瀏覽器支持中Multiple File selection這個小節(jié)所寫的那樣,IE一直發(fā)展到IE10才剛開始支持這個HTML5的特性,那么我們又不得不借助Flash神奇的力量來對低版本瀏覽器進(jìn)行多選圖片的支持。幸運的是plupload已經(jīng)幫我們做到了這一點,而且這一開關(guān)是默認(rèn)開啟的。如果你覺得你不需要用到多選圖片,你可以設(shè)置multi_selection: false來關(guān)閉這個特性。
繞過服務(wù)器直接批量上傳圖片到又拍云
又拍云提供了HTTP FORM API。通過這個接口,我們就可以直接從瀏覽器端發(fā)起上傳圖片的請求,而不需要通過我們自己的服務(wù)器進(jìn)行中轉(zhuǎn),大大降低了開銷。
使用又拍的HTTP FORM API
使用這個接口,就需要向又拍云發(fā)送一個表單。這個表單包含你所要上傳的文件,并且還需要包含policy和signature。Policy用于將上傳請求相關(guān)的參數(shù),例如保存路徑,文件類型,預(yù)處理結(jié)果等,另外,也包含了上傳請求授時間等。而Signature用于安全校驗。
為了演示方便,此處直接使用javascript來生成Policy和Signature。但在實際使用中,為了安全性考慮,請在服務(wù)器端完成這個過程。下面的代碼在官方的demo基礎(chǔ)上做了些許修改,主要是使用了官方的測試帳號,關(guān)于這兩個參數(shù)的具體生成方法,請參考官方的文檔:http://docs.upyun.com/api/form_api/。
plupload的配置
如何使得plupload可以配合又拍云的HTTP FORM API,著實讓我頭疼了一番。在查看plupload的文檔中,無意中的發(fā)現(xiàn)卻讓我看到了曙光,Upload to Amazon S3這個鏈接吸引了我。Amazon S3的全稱是Amazon Simple Storage Service,它提供的云存儲服務(wù)多多少少和又拍云有些相似。
于是根據(jù)這篇文章中關(guān)于瀏覽器端配置的介紹,我琢磨出了上傳到又拍云所需要的配置。其實說起來也很簡單,主要就是對url和multipart_params兩個參數(shù)進(jìn)行配置。下面的例子中的options.bucket、policy和signature直接使用上一節(jié)計算出來的值。
總結(jié)
如此這般,終于實現(xiàn)了通過plupload繞過服務(wù)器,向又拍云批量上傳圖片了。plupload真是一個很強大的庫,不過它對商業(yè)使用可以需要收費的哦,具體還是到它的官網(wǎng)上去了解吧!
是不是很簡單呢,主要是思路很不錯,值得我們?nèi)W(xué)習(xí),有問題請跟我留言,大家共同進(jìn)步
新聞熱點
疑難解答