( From: http://home.meegoq.com/home-space-do-blog-uid-17-id-81.html )
HTTP multipart/form-data 上传方式说明
已有 123 次阅读 2010-12-1 11:13 |个人分类:网络学习|关键词:HTTP multipart
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②
\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, 就会出错。
以上注意事项都必须遵守,否则请求就会出错。
分享到:
相关推荐
c#没有现成的multipart/form-data库,自己封的一个demo供参考。
使用indy自带的idhttp控件,用form表单(multipart/form-data)形式上传文件(图片,视频等)
用C语言实现multipart/form-data文件上传,没有用到curl之类的库。之前做个小的日志上传程序写的。
WebAPI通过multipart/form-data方式同时上传文件以及数据包含客户端上传例子
c#下post 发送 multipart/form-data和JSON数据
使用c#实现的HttpClient拼接multipart/form-data形式参数post提交数据,包含图片内容,有需要的可以下载,希望能帮到有需要的人,
解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?
c#模拟post发送json和multipart/form-data格式
解决上传文件enctype= multipart/form-data 时无法传递其他参数的问题,以及项目全局编码问题。用的插件是commons io + commons fileupload
c#post multipart/form-data和JSON数据
servlet上传 enctype="multipart/form-data" servlet上传 enctype="multipart/form-data
Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传
该程序是 multipart/form-data 远程dos利用程序,一台电脑直接打崩一台服务器!程序只为便于检测你服务器漏洞,切勿非法使用。 检测效果不明显的话,多运行几个实例将会增强攻击力度。
解决当FORM的ENCTYPE="multipart/form-data" 时action方法或者控制层用request.getParameter()获取不到值的方法 ?
NULL 博文链接:https://wese345.iteye.com/blog/686108
<form method="post" ENCTYPE="multipart/form-data"> file类型职务的普通参数传递到后台问题解决
NULL 博文链接:https://bertlee.iteye.com/blog/1134576
Uploads a stream using a multipart/form-data POST. HttpWebRequest 提交图片、资源。。。的完整代码
http post方式上传文件与表格,ContentType = multipart/form-data
本文实例讲述了PHP实现支持GET,POST,Multipart/form-data的HTTP请求类及其应用,分享给大家供大家参考。具体如下: HttpRequest.class.php类文件如下: <?php /** HttpRequest class, HTTP请求类,支持GET,POST,...