2010-10-26 80 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

相关问题