我尝试将文件从iPhone上传到服务器。我试图避免使用任何不是由apple制作的库,而且我可以告诉它看起来我需要在构建我的请求时达到相当低的水平。有人能告诉我multipart / form-data请求中的“边界”是什么以及如何正确使用它?
答案 0 :(得分:6)
边界是一段任意文本,客户端用它来分隔要发布的表单的字段。客户端声明它正在使用的边界作为Content-type
标题的一部分。
From the IETF Form-based File Upload in HTML RFC:
选择在任何数据中都不会出现的边界。 (这个 选择有时是概率性地完成的。)形式的每个字段 按照其在表格中出现的顺序发送,作为其一部分 多部分流。每个部分都标识了INPUT中的名称 原始HTML表单。每个部分都应贴上适当的标签 如果媒体类型是已知的(例如,从文件中推断出),则为内容类型 扩展或操作系统类型信息)或作为 应用/八位字节流。
...
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
。