2010-10-26 35 views
1

我試圖從iPhone上傳文件到服務器。我試圖避免使用任何不是由蘋果製作的庫,並且從我可以告訴它看起來我需要在構建我的請求時變得相當低級別。有人能告訴我多部分/形式 - 數據請求中的「邊界」是什麼以及如何正確使用它?邊界如何在多部分帖子請求中工作?

+0

你在編寫iPhone代碼或服務器代碼嗎? – 2010-10-26 19:26:00

+0

兩者,但我問的是在客戶端(iphone)構造請求。 – tybro0103 2010-10-26 19:26:43

回答

6

邊界是客戶用於分隔所發佈表單字段的任意一段文本。客戶端聲明它正在使用的邊界作爲Content-type標題的一部分。

From the IETF Form-based File Upload in HTML RFC

的邊界被選擇的是不以任何的數據的發生。 (此 選擇有時以概率方式完成。)形式爲 的每個字段按其出現在表單中的順序發送,作爲多部分流的一部分 。每個部分標識 原始HTML表單中的INPUT名稱。如果媒體類型是已知的(例如,從文件 擴展或操作系統鍵入信息推斷出)或作爲 application/octet-stream,則每個部分應該標記有合適的 內容類型。

...

6.例子

假設服務器提供了以下HTML:

<FORM ACTION="http://server.dom/cgi/handle" 
     ENCTYPE="multipart/form-data" 
     METHOD=POST> 
What is your name? <INPUT TYPE=TEXT NAME=submitter> 
What files are you sending? <INPUT TYPE=FILE NAME=pics> 
</FORM> 

,並在用戶鍵入 「喬吹」 的名稱字段,並選擇文本 文件「file1.txt」爲「您要發送什麼文件?」的答案

客戶端可能會發送回以下數據:如果用戶也表示了答案 圖像文件「file2.gif」到「什麼文件你發送」

Content-type: multipart/form-data, boundary=AaB03x 

    --AaB03x 
    content-disposition: form-data; name="field1" 

    Joe Blow 
    --AaB03x 
    content-disposition: form-data; name="pics"; filename="file1.txt" 
    Content-Type: text/plain 

    ... contents of file1.txt ... 
    --AaB03x-- 

,客戶端可能客戶端可能會發送回 以下數據:

Content-type: multipart/form-data, boundary=AaB03x 

    --AaB03x 
    content-disposition: form-data; name="field1" 

    Joe Blow 
    --AaB03x 
    content-disposition: form-data; name="pics" 
    Content-type: multipart/mixed, boundary=BbC04y 

    --BbC04y 
    Content-disposition: attachment; filename="file1.txt" 

在第一個例子中,邊界是固定字符串AaB03x。在第二個示例中,邊界是第一個AaB03x,然後切換到BbC04y

+0

好多了,謝謝。將-1轉換爲upvote。 – 2014-06-22 06:16:36

相關問題