HTTP multipart/form-data 上传方式说明(有8个注意点)

( 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, 就会出错。

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

http://www.chongchonggou.com/g_92052682.html

时间: 2024-10-09 16:49:52

HTTP multipart/form-data 上传方式说明(有8个注意点)的相关文章

如何使用multipart/form-data格式上传文件(POST请求时,数据是放在请求体内,而不是请求头内,在html协议中,用 “\r\n” 换行,而不是 “\n”)

在网络编程过程中需要向服务器上传文件.Multipart/form-data是上传文件的一种方式. Multipart/form-data其实就是浏览器用表单上传文件的方式.最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器. 表单形式上传附件 具体的步骤是怎样的呢? 首先,客户端和服务器建立连接(TCP协议). 第二,客户端可以向服务器端发送数据.因为上传文件实质上也是向服务器端发送请求. 第三,客户端按照符合“m

Web的几种上传方式总结

问题 文件上传在WEB开发中应用很广泛. 文件上传是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 以下总结了常见的文件(图片)上传的方式和要点处理. 表单上传 这是传统的form表单上传,使用form表单的input[type=”file”]控件,可以打开系统的文件选择对话框,从而达到选择文件并上传的目的,它的好处是多浏览器兼容,它是web开发者最常用的一种文件上传方式. 表单的代码如下: <form method="post" action=&

django Form组件 上传文件

上传文件 注意:FORM表单提交文件要有一个参数enctype="multipart/form-data" 普通上传: urls: url(r'^f1/',views.f1), url(r'^f2/',views.f2), views: def f1(request): if request.method == "GET": return render(request,'f1.html') else: import os #导入os模块 #request.get /

[转]如何使用multipart/form-data格式上传文件

form表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码.默认情况,这个编码格式是"application/x-www-form-urlencoded",不能用于文件上传:只有使用了multipart/form-data,才能完整的传递文件数据. 有时,在网络编程过程中需要向服务器上传文件.Multipart/form-data是上传文件的一种方式. Multipart/form-data其实就是浏览器用表单上传文件的

form文件上传,防止页面刷新

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>文件上传form提交</title></head><body><form id="form" method="post" enctype="multipart/form-data" target="ifra

笔谈HTTP Multipart POST请求上传文件

公司一做iOS开发的同事用HTTP Multipart POST请求上传语音数据,但是做了两天都没搞定,项目经理找到我去帮忙弄下.以前做项目只用过get.post,对于现在这个跟服务器交互的表单请求我没有做过,但是程序员学习能力还是要有的,解决问题的方法和经验是很重要的.做过2000万用户量的业务sdk的开发,这点东西自然不在话下,优秀的程序员就是要有解决问题的能力与方法. 1) 接口地址 接口地址为:http://ip:port/upload 2) UploadRequest消息定义 Form

Spring Boot + Vue 前后端分离,两种文件上传方式总结

在Vue.js 中,如果网络请求使用 axios ,并且使用了 ElementUI 库,那么一般来说,文件上传有两种不同的实现方案: 通过 Ajax 实现文件上传 通过 ElementUI 里边的 Upload 组件实现文件上传 两种方案,各有优缺点,我们分别来看. 准备工作 首先我们需要一点点准备工作,就是在后端提供一个文件上传接口,这是一个普通的 Spring Boot 项目,如下: SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/

jquery.form附件上传的 $.handleError 、以及 $.httpData报错原因及解决方法

jquery.form.js上传出现$.handleError  .以及  $.httpData错误 原因: 首先,jquery1.4以后的版本不在支持这两个方法. 解决方法: 添加 (在jquery.form.js)中添加如下方法: $.httpData=function( xhr, type, s ) { var ct = xhr.getResponseHeader( 'content-type'), xml = type == 'xml' || !type && ct &&a

在ASP.NET中实现图片、视频文件上传方式

一.图片 1.在前端用<asp:FileUpload ID="UpImgName" runat="server"/>控件 2.在后台.cs中写上 protected void btnSubmit_Click(object sender,EventArgs e) { string strImgPath=string.Empty; string strDateTime=dateTime.Now.Tostring("yyyyMMddhhmmss&qu