使用PUT方法上傳檔案

2021-07-23 19:28:29 字數 897 閱讀 2837

http中提供了這麼多方法,放著不用簡直浪費!流行使用post上傳檔案是因為當年的web沒有太多api的支援,只能用表單來上傳檔案,所以後來大家也習慣了使用post。但現在既然支援了這麼多api,用put方法上傳檔案也是可以實現的,而且語義上更合適。

put方法的特點是傳輸的實體部分是乙個無結構的二進位制資料,而post方法則傾向於結構化的資料。上傳檔案這個行為本身就是無結構資料的傳輸(檔案是乙個整體,檔案的內容與傳輸行為無關),所以使用put更合適。當然,上傳檔案這個行為不光是把檔案丟到伺服器上而已,可能還需要傳遞一些檔案的相關資訊,比如檔案在客戶端的檔名之類的,這在使用post方法時很容易實現。其實使用put方法也不存在什麼問題,這些額外資訊完全可以用自定義的http請求頭來傳輸。

現代瀏覽器對檔案操作的支援已經很豐富了,可以直接從file控制項的 files 屬性上獲取到使用者選中的檔案物件,然後通過xhr物件的 send 方法傳送到伺服器,這非常方便。而且伺服器端省去了對 multipart/form-data 的解析,實現起來更加容易。

使用put方法上傳檔案也存在一些需要解決的問題。根據put的語義,我們需要知道檔案上傳之後的url(這個url在檔案上傳前訪問的話是404狀態碼),而不是像post方法一樣,把所有的上傳都提交到同乙個url上。另外則是安全性的問題,並不是所有人都有上傳的許可權,比如某個資源屬於某個使用者,只有這個特定使用者可以操作,這實現起來就有點麻煩(其實post方法如果要實現這個的話也挺麻煩的,只是post的麻煩被掩蓋了)。對於這些問題,我覺得使用檔案md5作為url就很容易解決。檔案上傳前在前端就可以計算出md5,就可以得到上傳後的url,上傳後檔案也不會被篡改,許可權問題也隨之解決了。

其實對於put方法上傳檔案,我想到的遠不止以上這些。只是我的語言比較貧乏,沒辦法把一堆關係鬆散的概念一下子描述出來。我打算先試著把這玩意兒先實現出來,證明一些想法的正確性後再做進一步說明。

檔案上傳方法

接收方法一定要是multipartfile file。它是import org.springframework.web.multipart.multipartfile 這個包下面的。主要這個接收的檔名稱不可以和實體類中的檔名稱相同。public void uploadfile multipartfi...

put 方法和write 方法

ostream類提供了put 方法和write 方法,前者用於顯示字元,後者用於顯示字串。put 原型 ostream put char 當前標準與此相同,但被模板化以適應wchar t,返回乙個指向呼叫物件的引用,所以可拼接輸出 include includeusing namespace std...

使用ssh命令的方法上傳檔案

使用方式如下 1 上傳本地檔案到伺服器 scp path filename username servername path 例如scp var www test.php root 192.168.0.101 var www 把本機 var www 目錄下的test.php檔案上傳到192.168....