HTTP POST上传文件的格式说明

来源:互联网 发布:良朴袜子 知乎 编辑:程序博客网 时间:2024/05/17 02:40
前一阵,因为项目需要,将之前自己封装的黑莓10上的HTTP库添加了Post上传文件的接口,实现后一直也没有测试(因为之前实现过.Net上的,所以这次自信满满的觉得肯定不会有问题),今天实现在头像上传的功能时,居然一直出错,抓了半天包,修改了一上午也没找到原因,后来实在没辙时,想到了RFC文档,然后发现这次出问题又是一次自己粗心犯二导致的,所以发个博文记录一下以免以后好了伤疤又忘了疼。

关于boundary: 
RFC文档上描述,A boundary is selected that does not occur in any ofthedata.意思就是选择作为boundary的数据不会出现在要上传的数据里,这一点毫无疑问,如果作为分界数据的boundary,会出现在上传的数据里,那么boundary就没有意义了~其实RCF上没有规定boundary的格式,但是大多数实现里boundary都采用了-----配合一个随机数据的方式。 
 
关于multipart/form-data上传方式: 
其实在封装HTTPPOST上传文件的方法时,只要实现这一种即可(单个文件也可以用这种方式上传),下面上RFC上的Sample: 
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--

文件分界这里要切记是-- +boundary(这次出的问题也是在这犯二了,居然没有在boundary前加这两个-),结束的标志是-- + boundary +--,在每一段信息描述后要跟一个\r\n再跟文件数据,文件数据后面也要跟一个\r\n,这里也是一个关键点,其他只要按照上面的Sample去实现就好了,如果Content-Type部分不想添加根据文件后缀名填充值的话,可以直接用application/octet-stream。 
 
RFC文档:http://www.ietf.org/rfc/rfc1867 
Content-Type对照表:http://tool.oschina.net/commons
0 0
原创粉丝点击