1. 程式人生 > >HTTP multipart/form-data 上傳方式說明(有8個註意點)

HTTP multipart/form-data 上傳方式說明(有8個註意點)

ria ubi reference 就會 ros pda www tran cep

( From: http://home.meegoq.com/home-space-do-blog-uid-17-id-81.html )

HTTP multipart/form-data 上傳方式說明

已有 123 次閱讀 2010-12-1 11:13 |個人分類:網絡學習|關鍵詞:HTTP multipart

http上傳文件方面的功能使用的協議是rfc1867 (http://www.ietf.org/rfc/rfc1867.txt) 為 http 協議。客戶端的瀏覽器,如 Microsoft IE, Mozila, Opera 等,按照此規範將用戶指定的文件發送到服務器。服務器端的網頁程序,如 php, asp, jsp 等,可以按照此規範,解析出用戶發送來的文件。Microsoft IE, Mozila, Opera 已經支持此協議,在網頁中使用一個特殊的 form 就可以發送文件。絕大部分 http 服務器,包括 tomcat ,已經支持此協議,可接受發送來的文件。各種網頁程序,如 php, asp, jsp 中,對於上傳文件已經做了很好的封裝。

請求報文頭如下,每一行後面如果沒有標明字符,說明其後沒有任何字符,直接連著下一行的字符:

POST /handset/save HTTP/1.1

\r\n

Host: gateway.ereneben.com

\r\n

Accept: */*

\r\n

User-Agent: T1 HTTP Adaptor

\r\n

Connection: Keep-Alive

\r\n

User-Serial: 1234567890ABCDEFGHIJKLMC

\r\n

User-Cert: Q+XuG7315JEIzRw9atIvjhCv0d8+4CN5ZGLZWBPs+1FjUcl5Bijd859rG4BUbIJrjoK2dbEuMMC8XmFAcuxJ2SSyXMty63iu0tnhsCJhgPmo4bFV0Px+V9CwKLixNa/+7bX2t3sCz7TMPfrYlKECF3xm4rB9q9/6htFKxCv99q4=

\r\n

User-ID: 122

\r\n

Content-Type: multipart/form-data; boundary=--------------------------7d93b91e2404d①

\r\n

Content-Length: 299⑦

\r\n

\r\n

-----------------------------7d93b91e2404d②

\r\n

Content-Disposition: form-data; name="update1"; filename="/Storage Card/eben.txt"

\r\n

Content-Type: application/octet-stream; charset=GBK

\r\n

Content-Transfer-Encoding: binary

\r\n

\r\n③

CkAtom C++ Class Reference (Visual C++)

\r\n④

-----------------------------7d93b91e2404d --⑤

\r\n⑥

說明:

①Content-Type必須指定boundary。其中前面的"---------------------------7d"是 IE 特有的標誌。其後的字符串"7d93b91e2404d"是隨機生成的字符串。Boundary是文件上傳時表單中文件分割線。

②請求報文體中的分割線

"-----------------------------7d93b91e2404d"

比boundary=---------------------------7d93b91e2404d

中的分割線前面多"--"。

③表單中上傳文件的請求頭和文件數據之間的分割符是"\r\n \r\n"。與HTTP請求報文頭與報文體之間的分割符相同。

④上載文件結尾需要追加分割符"\r\n"。

⑤最後一個文件結尾的分割線"-----------------------------7d93b91e2404da--",即boundary之前和結尾都需要追加"--"。最後一個分割線比較特殊,註意不要忘記後面的"--"。

⑥最後請求報文結尾需要追加分割符"\r\n"。

⑦ 最後需要註意的是請求報文頭中的Content-Length參數的值是整個報文體的長度。即從分割線②第一個字符開始,到報文結尾分割 符"\r\n"為止的整個長度。註意不要漏掉計算報文結尾分割符"\r\n"的長度,否則Content-Length參數的值變為了297, 就會出錯。

以上註意事項都必須遵守,否則請求就會出錯。

http://www.chongchonggou.com/g_92052682.html

HTTP multipart/form-data 上傳方式說明(有8個註意點)