曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4944|回复: 0
打印 上一主题 下一主题

multipart/form-data

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-10-18 11:44:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Multipart/form-data 实际上是浏览器使用表单上传文件的一种方式,比如在写电子邮件时,使用的附件功能便是这种方式的使用实例之一,以及在一些论坛里,网盘上使用的附件上传功能也是如此。

它的通讯方式如下:
首先,客户端与服务器建立链接( TCP 协议)。
接着,客户端向服务器发送数据。
然后,服务器应允后,客户端按照 "multipart/form-data" 的格式向服务器端发送数据。

下面是一个简单的上传页面代码:
[Plain Text] 纯文本查看 复制代码
<html>
    <head>
        <title>file upload system</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>

    <body>
        <p align="center">
            Welcome to use file uploading system
        </p>

        <p align="center">
            <form method="post" action="upload.php" enctype="multipart/form-data">

                <input type="hidden" name="MAX_FILE_SIZE" value="1048576">

                <input type="file" name="myfile" size="50"><br><br>
                <input type="submit" value="upload">
                <input type="reset" value="reset">
            
            </form>

        </p>
    </body>
</html>

这个页面是个前台页面,后台处理使用了一个 upload.php 的文件进行了处理,这个文件和这里要说明的主题并没有太大关系,所以略去不提。

在这个页面上当我们点选了要上传的文件并点击提交按钮时,文件就会被上传到服务器。用 wireshark 一类的工具捕捉一下数据包,会发现其中有一行:
10    0.041209    192.168.1.106    192.168.1.106    HTTP    POST /php/upload/upload.php HTTP/1.1  (GIF89a)
这是个 POST 请求,其数据放在请求体内。

由下图可见:


上图中, boundary 用来隔开表单中不同的数据部分,其值由系统随机产生。紧接着 boundary 的是该部分数据的具体描述,再接下来才是数据。

注意观察,边界 boundary 是由 "--" + "boundary 开始,而结束是由 "--" + "boundary " "--" 结束的。

注意在 html 协议中,使用 \r\n 来换行,而不是 \n 。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-19 21:31 , Processed in 0.063512 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表