我试图将文件从 iPhone 上传到服务器。我试图避免使用任何不是苹果公司制造的库,据我所知,我需要在构建我的请求时达到相当低的水平。有人能告诉我多部分/表单数据请求中的“边界”是什么以及如何正确使用它吗?
问问题
1189 次
1 回答
8
边界是一段任意的文本,客户端使用它来分隔要发布的表单的字段。客户端声明它正在使用的边界作为Content-type
标头的一部分。
来自 HTML RFC中基于表单的 IETF 文件上传:
选择的边界不会出现在任何数据中。(这种选择有时是按概率进行的。)表单的每个字段都按照它在表单中出现的顺序作为多部分流的一部分发送。每个部分都标识原始 HTML 表单中的 INPUT 名称。如果媒体类型已知(例如,从文件扩展名或操作系统类型信息推断)或作为应用程序/八位字节流,则每个部分都应使用适当的内容类型进行标记。
...
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>
并且用户在名称字段中键入“Joe Blow”,然后选择文本文件“file1.txt”作为“您发送什么文件?”的答案。
客户端可能会发回以下数据:
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--
如果用户还指定了图像文件“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" Content-type: multipart/mixed, boundary=BbC04y --BbC04y Content-disposition: attachment; filename="file1.txt"
在第一个示例中,边界是固定字符串AaB03x
。在第二个例子中,边界首先是AaB03x
,然后切换到BbC04y
。
于 2010-10-26T19:27:28.767 回答