1. 程式人生 > 實用技巧 >如何使用multipart/form-data格式上傳檔案

如何使用multipart/form-data格式上傳檔案

在網路程式設計過程中需要向伺服器上傳檔案。Multipart/form-data是上傳檔案的一種方式。

Multipart/form-data其實就是瀏覽器用表單上傳檔案的方式。最常見的情境是:在寫郵件時,向郵件後新增附件,附件通常使用表單新增,也就是用multipart/form-data格式上傳到伺服器。

表單形式上傳附件

具體的步驟是怎樣的呢?

首先,客戶端和伺服器建立連線(TCP協議)。

第二,客戶端可以向伺服器端傳送資料。因為上傳檔案實質上也是向伺服器端傳送請求。

第三,客戶端按照符合“multipart/form-data”的格式向伺服器端傳送資料。

Multipart/form-data的格式是怎樣的呢?

既然Multipart/form-data格式就是瀏覽器用表單提交資料的格式,我們就來看看檔案經過瀏覽器編碼後是什麼樣子。


HTML表單

瀏覽器開啟的表單

點選“Browse…”分別選擇“unknow.gif”和“unknow1.gif”檔案,點選“submit”按紐後,檔案將被上傳到伺服器。

下面是伺服器收到的資料:


伺服器收到的資料

這是一個POST請求。所以資料是放在請求體內,而不是請求頭內。

這行指出這個請求是“multipart/form-data”格式的,且“boundary”是 “---------------------------7db15a14291cce”這個字串。

不難想象,“boundary”是用來隔開表單中不同部分資料的。例子中的表單就有 2 部分資料,用“boundary”隔開。“boundary”一般由系統隨機產生,但也可以簡單的用“-------------”來代替。

實際上,每部分資料的開頭都是由"--" + boundary開始,而不是由 boundary 開始。仔細看才能發現下面的開頭這段字串實際上要比 boundary 多了個 “--”

緊接著 boundary 的是該部分資料的描述。

接下來才是資料。


可以用滑鼠滾動改變大小

“GIF”gif格式圖片的檔案頭,可見,unknow1.gif確實是gif格式圖片。

在請求的最後,則是 "--" + boundary + "--" 表明表單的結束。

需要注意的是,在html協議中,用 “\r\n” 換行,而不是 “\n”。

轉載於:https://my.oschina.net/tingzi/blog/83637