博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何使用multipart/form-data格式上传文件
阅读量:6800 次
发布时间:2019-06-26

本文共 1012 字,大约阅读时间需要 3 分钟。

在网络编程过程中需要向服务器上传文件。Multipart/form-data是上传文件的一种方式。

Multipart/form-data其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器。

表单形式上传附件

具体的步骤是怎样的呢?

首先,客户端和服务器建立连接(TCP协议)。

第二,客户端可以向服务器端发送数据。因为上传文件实质上也是向服务器端发送请求。

第三,客户端按照符合“multipart/form-data”的格式向服务器端发送数据。

Multipart/form-data的格式是怎样的呢?

既然Multipart/form-data格式就是浏览器用表单提交数据的格式,我们就来看看文件经过浏览器编码后是什么样子。

  

HTML表单

 

浏览器打开的表单

 

点击“Browse…”分别选择“unknow.gif”和“unknow1.gif”文件,点击“submit”按纽后,文件将被上传到服务器。

下面是服务器收到的数据:

服务器收到的数据

这是一个POST请求。所以数据是放在请求体内,而不是请求头内。

这行指出这个请求是“multipart/form-data”格式的,且“boundary”是 “---------------------------7db15a14291cce”这个字符串。

不难想象,“boundary”是用来隔开表单中不同部分数据的。例子中的表单就有 2 部分数据,用“boundary”隔开。“boundary”一般由系统随机产生,但也可以简单的用“-------------”来代替。

实际上,每部分数据的开头都是由"--" + boundary开始,而不是由 boundary 开始。仔细看才能发现下面的开头这段字符串实际上要比 boundary 多了个 “--”   

紧接着 boundary 的是该部分数据的描述。

接下来才是数据。

 

“GIF”gif格式图片的文件头,可见,unknow1.gif确实是gif格式图片。

在请求的最后,则是 "--" + boundary + "--" 表明表单的结束。

 

需要注意的是,在html协议中,用 “\r\n” 换行,而不是 “\n”。

转载于:https://my.oschina.net/tingzi/blog/83637

你可能感兴趣的文章
利用node.js和mongodb为你的app写一个web服务
查看>>
Rails 3 Authlogic: Could not find generator ses...
查看>>
iOS静态库的那些坑
查看>>
IOS-APP提交上架流程(新手必看!2016年3月1日最新版)
查看>>
oracle rman 2
查看>>
hyper-v下NIC实验出现的问题
查看>>
shell 显示文件的行数
查看>>
Linux:常规目录操作
查看>>
2016年2月书单
查看>>
redis存储 100 条最新的记录
查看>>
There is no reason to wait
查看>>
tomcat 配置单向加密连接器-01
查看>>
数据库备份恢复 mysqldump, source
查看>>
花生壳与网络地址转换
查看>>
4.信号与传输介质
查看>>
免费资源下载:Simplycons图标集
查看>>
MySQL 性能医生:OrzDBA
查看>>
【设计模式】代理模式
查看>>
linux脚本获取系统信息(选自实验楼实验)
查看>>
俄罗斯游戏软件:C语言应用初步感受
查看>>