zoukankan      html  css  js  c++  java
  • http协议中用于上传多个文件的 multipart 字段

    大家好,我是许飞,微软拼音的开发实习生。在网络编程中,经常用到从服务器上“下载”一些数据,有时却要向服务器“上传”数据。曾在一个原型中使用了“multipart/form-data”格式向Web服务器上传文件,这里和大家分享。
    ------------------------------------------------------------------
    有时,在网络编程过程中需要向服务器上传文件。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 多了个 “--”

    clip_image011

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

    接下来才是数据。

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

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

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

  • 相关阅读:
    DeepIn系统使用和相关软件安装
    在JDK11中生成JRE11的方法
    IIS 7 中设置文件上传大小的方法
    在服务器上发布MVC5的应用
    安装了多个Oracle11g的客户端,哪个客户端的tnsnames.ora会起作用?
    配置putty或SecureCRT防止SSH连接中断
    借助FRP反向代理实现内网穿透
    你不知道的hostname命令
    Perl脚本通过Expect登陆多台设备批量执行命令并Log
    Linux内核参数配置
  • 原文地址:https://www.cnblogs.com/UnGeek/p/6110743.html
Copyright © 2011-2022 走看看