HTTP中提供了這么多方法,放著不用簡(jiǎn)直浪費(fèi)!流行使用POST上傳文件是因?yàn)楫?dāng)年的Web沒(méi)有太多API的支持,只能用表單來(lái)上傳文件,所以后來(lái)大家也習(xí)慣了使用POST。但現(xiàn)在既然支持了這么多API,用PUT方法上傳文件也是可以實(shí)現(xiàn)的,而且語(yǔ)義上更合適。
PUT方法的特點(diǎn)是傳輸?shù)膶?shí)體部分是一個(gè)無(wú)結(jié)構(gòu)的二進(jìn)制數(shù)據(jù),而POST方法則傾向于結(jié)構(gòu)化的數(shù)據(jù)。上傳文件這個(gè)行為本身就是無(wú)結(jié)構(gòu)數(shù)據(jù)的傳輸(文件是一個(gè)整體,文件的內(nèi)容與傳輸行為無(wú)關(guān)),所以使用PUT更合適。當(dāng)然,上傳文件這個(gè)行為不光是把文件丟到服務(wù)器上而已,可能還需要傳遞一些文件的相關(guān)信息,比如文件在客戶端的文件名之類的,這在使用POST方法時(shí)很容易實(shí)現(xiàn)。其實(shí)使用PUT方法也不存在什么問(wèn)題,這些額外信息完全可以用自定義的HTTP請(qǐng)求頭來(lái)傳輸。
現(xiàn)代瀏覽器對(duì)文件操作的支持已經(jīng)很豐富了,可以直接從FILE控件的files屬性上獲取到用戶選中的文件對(duì)象,然后通過(guò)XHR對(duì)象的send方法發(fā)送到服務(wù)器,這非常方便。而且服務(wù)器端省去了對(duì) multipart/form-data 的解析,實(shí)現(xiàn)起來(lái)更加容易。
使用PUT方法上傳文件也存在一些需要解決的問(wèn)題。根據(jù)PUT的語(yǔ)義,我們需要知道文件上傳之后的URL(這個(gè)URL在文件上傳前訪問(wèn)的話是404狀態(tài)碼),而不是像POST方法一樣,把所有的上傳都提交到同一個(gè)URL上。另外則是安全性的問(wèn)題,并不是所有人都有上傳的權(quán)限,比如某個(gè)資源屬于某個(gè)用戶,只有這個(gè)特定用戶可以操作,這實(shí)現(xiàn)起來(lái)就有點(diǎn)麻煩(其實(shí)POST方法如果要實(shí)現(xiàn)這個(gè)的話也挺麻煩的,只是POST的麻煩被掩蓋了)。對(duì)于這些問(wèn)題,我覺(jué)得使用文件MD5作為URL就很容易解決。文件上傳前在前端就可以計(jì)算出MD5,就可以得到上傳后的URL,上傳后文件也不會(huì)被篡改,權(quán)限問(wèn)題也隨之解決了。
其實(shí)對(duì)于PUT方法上傳文件,我想到的遠(yuǎn)不止以上這些。只是我的語(yǔ)言比較貧乏,沒(méi)辦法把一堆關(guān)系松散的概念一下子描述出來(lái)。我打算先試著把這玩意兒先實(shí)現(xiàn)出來(lái),證明一些想法的正確性后再做進(jìn)一步說(shuō)明。
分享標(biāo)題:使用PUT方法上傳文件如何?
標(biāo)題來(lái)源:http://www.rwnh.cn/news30/326130.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站維護(hù)、網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站設(shè)計(jì)、ChatGPT
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源:
創(chuàng)新互聯(lián)