( 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#_multipartform_data示例"中,可能包含了这样的示例代码,我们可以从中学习如何在C#环境中实现文件上传或其他多部分数据传输。 通过理解以上知识点和查看示例代码,我们可以深入理解`...
在Web开发中,文件上传是一项常见的功能,而`multipart/form-data`是一种HTTP协议中用于处理表单数据,尤其是包含文件上传的表单数据的编码方式。这篇博客文章可能探讨了如何利用这种编码类型来实现文件上传,并且...
在探讨“解决当FORM的ENCTYPE='multipart/form-data'时request.getParameter()获取不到值的方法”这一主题时,我们首先需要理解为什么在特定情况下,传统的`request.getParameter()`方法无法正常工作,以及如何通过...
当我们需要上传文件或同时发送键值对(包括复杂的数据结构如JSON)时,通常会使用`multipart/form-data`和JSON这两种数据格式。下面我们将深入探讨如何在C#中实现这两种数据格式的POST请求。 一、`multipart/form-...
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows应用程序、Web...通过使用Json.NET库处理JSON数据,以及HttpClient类处理multipart/form-data数据,你可以轻松地与各种API进行交互,实现文件上传等功能。
WebAPIFileUploadDemo是一个示例项目,展示了如何使用ASP.NET Web API处理这种类型的数据传输,特别是利用`multipart/form-data`编码方式。这个教程将深入探讨这个过程,并提供客户端和服务器端的关键代码片段。 ...
Apache Commons IO是处理IO操作的工具集,而Commons Fileupload则是专门用来处理文件上传的库,它可以方便地处理`multipart/form-data`编码的表单数据。 以下是关于这个话题的详细知识点: 1. **HTML表单与文件...
Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传
`multipart/form-data`是HTTP协议中一种用于上传文件或发送复杂数据(如带有文件的表单数据)的Content-Type。在C#中,我们可以使用HttpClient类来构造并发送这样的POST请求。首先,需要创建一个...
用C语言实现multipart/form-data文件上传,没有用到curl之类的库。之前做个小的日志上传程序写的。
使用c#实现的HttpClient拼接multipart/form-data形式参数post提交数据,包含图片内容,有需要的可以下载,希望能帮到有需要的人,
在Java Web开发中,我们经常遇到表单提交数据的情况,特别是涉及到文件上传时,`<form>`标签的`ENCTYPE`属性通常会被设置为`multipart/form-data`。这是因为`multipart/form-data`允许在请求中携带二进制数据,如...
"multipart/form-data" 是一种HTTP协议中的数据编码方式,主要用于在表单提交时上传文件,如图片或视频。本教程将深入讲解如何利用 Indy 10 库中的 `TIdHTTP` 控件来实现这一功能。 首先,你需要确保已经安装了Indy...
multipart/form-data是HTTP协议中用于表单数据上传的一种格式,通常用于文件上传。 在Web开发中,服务器端需要正确处理这种类型的数据,以防止恶意用户通过大量或异常的数据负载来消耗服务器资源。PHPDOS利用了某些...
servlet上传 enctype="multipart/form-data" servlet上传 enctype="multipart/form-data
在Android平台上,实现图片上传通常涉及使用HTTP协议中的multipart/form-data请求类型,这是处理表单数据,特别是上传文件的标准方式。multipart/form-data允许我们在请求体中包含多个部分,每个部分可以是不同的...
Uploads a stream using a multipart/form-data POST. HttpWebRequest 提交图片、资源。。。的完整代码
### 解决Java enctype "multipart/form-data" 文件上传传值问题 在Java Web开发中,处理文件上传是一项常见的任务。特别是当涉及到使用`multipart/form-data`作为表单的编码类型时,这种需求更为突出。本文将深入...
由于有 boundary 隔离,所以 multipart/form-data 既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。 (二)multipart/form-data的详细格式 multipart/form-data的详细格式可以分为...
在Web开发中,`multipart/form-data`是一种用于发送表单数据的编码类型,尤其适用于处理文件上传。此编码方式能够使客户端浏览器将表单中的普通文本字段与文件字段一起发送到服务器端进行处理。 #### 标题解析 - **...