HTTP multipart/form-data 上传方式说明

 

http上传文件方面的功能使用的协议是rfc1867 (http://www.ietf.org/rfc/rfc1867.txt) http协议。客户端的浏览器,如 Microsoft IE, Mozila, Opera等,按照此规范将用户指定的文件发送到服务器。服务器端的网页程序,如 php, asp, jsp等,可以按照此规范,解析出用户发送来的文件。Microsoft IE, Mozila, Opera已经支持此协议,在网页中使用一个特殊的 form就可以发送文件。绝大部分 http服务器,包括 tomcat,已经支持此协议,可接受发送来的文件。各种网页程序,如 php, asp, jsp中,对于上传文件已经做了很好的封装。

请求报文头如下,每一行后面如果没有标明字符,说明其后没有任何字符,直接连着下一行的字符:

 

POST /handset/save HTTP/1.1

/r/n

Host: gateway.ereneben.com

/r/n

Accept: */*

/r/n

User-Agent: T1 HTTP Adaptor

/r/n

Connection: Keep-Alive

/r/n

User-Serial: 1234567890ABCDEFGHIJKLMC

/r/n

User-Cert: Q+XuG7315JEIzRw9atIvjhCv0d8+4CN5ZGLZWBPs+1FjUcl5Bijd859rG4BUbIJrjoK2dbEuMMC8XmFAcuxJ2SSyXMty63iu0tnhsCJhgPmo4bFV0Px+V9CwKLixNa/+7bX2t3sCz7TMPfrYlKECF3xm4rB9q9/6htFKxCv99q4=

/r/n

User-ID: 122

/r/n

Content-Type: multipart/form-data; boundary=--------------------------7d93b91e2404d

/r/n

Content-Length:299

/r/n

/r/n

-----------------------------7d93b91e2404d

Content-Disposition: form-data;name="param1"\r\n

/r/n

param_value\r\n

-----------------------------7d93b91e2404d

/r/n

Content-Disposition: form-data; name="update1"; filename="/Storage Card/eben.txt"

/r/n

Content-Type: application/octet-stream; charset=GBK

/r/n

Content-Transfer-Encoding: binary

/r/n

/r/n

CkAtom C++ Class Reference (Visual C++)

/r/n

-----------------------------7d93b91e2404d --

/r/n

 

说明:

   Content-Type必须指定boundary。其中前面的“---------------------------7d”是 IE 特有的标志。其后的字符串“7d93b91e2404d”是随机生成的字符串。Boundary是文件上传时表单中文件分割线。

 

   请求报文体中的分割线

 

 “-----------------------------7d93b91e2404d

boundary=---------------------------7d93b91e2404d

中的分割线前面多--

 

   表单中上传文件的请求头和文件数据之间的分割符是 /r/n /r/n。与HTTP请求报文头与报文体之间的分割符相同。

   上载文件结尾需要追加分割符 /r/n

   最后一个文件结尾的分割线 -----------------------------7d93b91e2404da--,即boundary之前和结尾都需要追加--。最后一个分割线比较特殊,注意不要忘记后面的--

   最后请求报文结尾需要追加分割符 /r/n

   最后需要注意的是请求报文头中的Content-Length参数的值是整个报文体的长度。即从分割线②第一个字符开始,到报文结尾分割符 /r/n为止的整个长度。注意不要漏掉计算报文结尾分割符 /r/n的长度,否则Content-Length参数的值变为了297就会出错。此行是可选的。现在一般不直接指定报文体长度,通过分隔符来标志内容是否发送完成。

⑧如果上传文件,与服务器约定需要上传一些固定的表单参数,需要通过表单参数传递。name后面指定参数名称,第三行为表单参数对应的参数值。如果有多个参数,重复此结构。


以上注意事项都必须遵守,否则请求就会出错。

 

 

-- ---------------------------7d93b91e2404d
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值