http協議中用於上傳多個文件的 multipart 字段

你們好,我是許飛,微軟拼音的開發實習生。在網絡編程中,常常用到從服務器上「下載」一些數據,有時卻要向服務器「上傳」數據。曾在一個原型中使用了「multipart/form-data」格式向Web服務器上傳文件,這裏和你們分享。
------------------------------------------------------------------
有時,在網絡編程過程當中須要向服務器上傳文件。Multipart/form-data是上傳文件的一種方式。
html

Multipart/form-data其實就是瀏覽器用表單上傳文件的方式。最多見的情境是:在寫郵件時,向郵件後添加附件,附件一般使用表單添加,也就是用multipart/form-data格式上傳到服務器。編程

表單形式上傳附件瀏覽器

具體的步驟是怎樣的呢?服務器

首先,客戶端和服務器創建鏈接(TCP協議)。網絡

第二,客戶端能夠向服務器端發送數據。由於上傳文件實質上也是向服務器端發送請求。編碼

第三,客戶端按照符合「multipart/form-data」的格式向服務器端發送數據。spa

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

既然Multipart/form-data格式就是瀏覽器用表單提交數據的格式,咱們就來看看文件通過瀏覽器編碼後是什麼樣子。orm

HTML表單htm

瀏覽器打開的表單

 

點擊「Browse…」分別選擇「unknow.gif」和「unknow1.gif」文件,點擊「submit」按紐後,文件將被上傳到服務器。

下面是服務器收到的數據:

服務器收到的數據

這是一個POST請求。因此數據是放在請求體內,而不是請求頭內。

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

不難想象,「boundary」是用來隔開表單中不一樣部分數據的。例子中的表單就有 2 部分數據,用「boundary」隔開。「boundary」通常由系統隨機產生,但也能夠簡單的用「-------------」來代替。

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

clip_image011

緊接着 boundary 的是該部分數據的描述。

接下來纔是數據。

「GIF」gif格式圖片的文件頭,可見,unknow1.gif確實是gif格式圖片。

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

 

須要注意的是,在html協議中,用 「/r/n」 換行,而不是 「/n」

相關文章
相關標籤/搜索