通过 http 协议上传文件
来源:互联网 发布:货品查询软件 编辑:程序博客网 时间:2024/04/28 09:29
转载自:http://blog.csdn.net/liyanbo1984/article/details/5561418
1、概述
在最初的 http 协议中,没有上传文件方面的功能。 rfc1867 ( http://www.ietf.org/rfc/rfc1867.txt ) 为 http 协议添加了这个功能。客户端的浏览器,如 Microsoft IE, Mozila, Opera 等,按照此规范将用户指定的文件发送到服务器。服务器端的网页程序,如 php, asp, jsp 等,可以按照此规范,解析出用户发送来的文件。
Microsoft IE, Mozila, Opera 已经支持此协议,在网页中使用一个特殊的 form 就可以发送文件。
绝大部分 http server ,包括 tomcat ,已经支持此协议,可接受发送来的文件。
各种网页程序,如 php, asp, jsp 中,对于上传文件已经做了很好的封装。
2、 客户端发送内容构造
假设接受文件的网页程序位于 http://192.168.29.65/upload_file/UploadFile.
假设我们要发送一个二进制文件、一个文本框表单项、一个密码框表单项。文件名为 E:/s ,其内容如下:(其中的XXX代表二进制数据,如 01 02 03)
a
bb
XXX
ccc
客户端应该向 192.168.29.65 发送如下内容:(红色部分为请求体中的内容)
POST /upload_file/UploadFile HTTP/1.1
Accept: text/plain, */*
Accept-Language: zh-cn
Host: 192.168.29.65:80
Content-Type:multipart/form-data;boundary=7d33a816d302b6
User-Agent: Mozilla/4.0 (compatible; OpenOffice.org)
Content-Length: 424
Connection: Keep-Alive
--7d33a816d302b6
Content-Disposition: form-data; name="userfile1"; filename="E:/s"
Content-Type: application/octet-stream(回车)
(回车)
a
bb
XXX
ccc
--7d33a816d302b6
Content-Disposition: form-data; name="text1"(回车)
(回车)
foo
--7d33a816d302b6
Content-Disposition: form-data; name="password1"(回车)
(回车)
bar
--7d33a816d302b6--(回车)
注: 回车=/r/n
此内容必须一字不差,包括最后的回车。
注意:Content-Length: 424 这里的424是红色内容的总长度(包括最后的回车)
注意这一行:
Content-Type: multipart/form-data; boundary=7d33a816d302b6
根据 rfc1867, multipart/form-data是必须的.
--7d33a816d302b6 是分隔符,分隔多个文件、表单项。其中33a816d302b6 是即时生成的一个数字,用以确保整个分隔符不会在文件或表单项的内容中出现。前面的 --7d 是 IE 特有的标志。 Mozila 为--71
用户可以选择多个文件,填写表单其它项,点击“提交”按钮后就开始上传给 http://192.168.29.65/upload_file/UploadFile(这是一个 servelet 程序)
注意 enctype="multipart/form-data", method=post, type="file" 。根据 rfc1867, 这三个属性是必须的。multipart/form-data 是新增的编码类型,以提高二进制文件的传输效率。具体的解释请参阅 rfc1867
- 通过 http 协议上传文件
- 通过 http 协议上传文件
- 通过HTTP协议上传文件
- 通过 http 协议上传文件
- 通过HTTP协议上传文件
- 通过HTTP协议上传文件
- 通过HTTP协议上传文件
- 通过 http 协议上传文件
- 通过 http 协议上传文件
- 通过 http 协议上传文件
- 通过HTTP协议向服务器端上传文件
- [转]通过 http 协议上传文件
- 通过Http协议实现文件上传
- Java Android通过Http协议上传文件
- Android--之通过Http协议上传文件
- 通过Http协议实现文件上传
- android通过http协议实现文件上传
- 通过HTTP协议实现文件上传
- react-native中给图片设置原角
- Android -- 关于UI卡顿的优化
- IE下附件上传组件样式
- LeetCode 34. Search for a Range
- VMware问题解决
- 通过 http 协议上传文件
- Gank 是一个 MaterialDesign 风格和[MVP]模式的项目。
- java中观察者模式的使用场景
- vtkPolygonalSurfaceContourLineInterpolator 多边形曲面上的多边形绘制器
- 关于CSR8670如何使用PioSetMapPins32()函数配置额外的IO口
- 更完美的《iOS中textField、textView判断过滤禁用emoji表情》,解决过滤表情后九宫格输入不了问题
- 不定长参数
- (环问题并查集)Codeforces Round #363 D Fix a Tree
- js正则表达exec与match的区别