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

2023-11-03

有时,在网络编程过程中需要向服务器上传文件。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”


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用multipart/form-data格式上传文件 的相关文章

随机推荐

  • grafana对指标进行组合计算

    在使用Grafana配置图表看板时 我们可能需要对多个查询条件筛选出来的结果进行计算 把计算结果生成最终的图表 此时需要用到transform功能 add field from calculation
  • 2022年高教社杯全国大学生数学建模竞赛-【赛题解析篇】E题:小批量物料的生产安排(附MATLAB代码)

    前言 最近发现一个关于数学建模比较好的专栏 需要的小伙伴可移步 数学建模应用 算法实战案例精讲300篇 持续更新ing 赛题描述 某电子产品制造企业面临以下问题 在多品种小批量的物料生产中 事先无法知道物料的 实际需求量 企业希望运用数学方
  • 二维数组和数组指针

    二维数组 int arr 3 4 每个元素arr 0 arr 1 arr 2 等价于一维数组名 所以也是子数组的首地址 3个一维数组分别有4个元素 二维数组名arr是首地址 可以理解为指向第一个子数组的数组指针 如int p 4 arr 所
  • 【CTR模型】TensorFlow2.0 的 xDeepFM 实现与实战(附代码+数据)

    CTR 系列文章 广告点击率 CTR 预测经典模型 GBDT LR 理解与实践 附数据 代码 CTR经典模型串讲 FM FFM 双线性 FFM 相关推导与理解 CTR深度学习模型之 DeepFM 模型解读 CTR模型 TensorFlow2
  • 特斯拉传记--摘要

    参考 https baike baidu com item E5 B0 BC E5 8F A4 E6 8B 89 C2 B7 E7 89 B9 E6 96 AF E6 8B 89 4481228 fr aladdin 尼古拉 特斯拉 Nik
  • python flask自定义404错误页面

    在用浏览器访问url的时候 如果url不正确会报404错误 默认的404错误太枯燥了 这里我讲述一下如何将404错误页面修改为好看的404页面 1 首先 创建一个我们希望当出现404错误时展示的html页面 这里我随便写一个页面内容不多定义
  • Linux_centos7_文件与目录管理_指令与文件搜寻_(4)_(bird_bro)

    kingarthur localhost pwd home kingarthur Desktop Documents Downloads Music Pictures Public README README 1 README 2 READ
  • 漫话拥塞控制:BBRv3 来啦

    周一 2023 07 31 临近午夜刚准备睡觉 收到 bbr dev 一封邮件 贴出 IETF CCWG 大会链接 IETF117 CCWG 20230725 2200 以及 bbr3 幻灯片 BBRv3 Algorithm Bug Fix
  • android开发三大框架!Android架构师教你如何突破瓶颈,Android篇

    安卓开发大军浩浩荡荡 经过近十年的发展 Android技术优化日异月新 如今Android 11 0 已经发布 Android系统性能也已经非常流畅 可以在体验上完全媲美iOS 但是 到了各大厂商手里 改源码 自定义系统 使得Android
  • c语言 静态函数和普通函数的区别是什么,类函数和普通函数区别 成员函数和普通函数的所有区别...

    1 成员函数和普通函数的所有区别 区别很大 1 成员函数是面向对象的概念 所谓的成员函数 是指一个函数作为类的成员 公有成员 私有成员或者保护成员 2 普通函数一般有两种传递方式 按类型传递和按值传递 也就是传指针和传返回值两种情况 成员函
  • linux----使用rm -rf 删除大文件后磁盘空间并未释放的解决办法

    原文链接 linux 使用rm rf 删除大文件后磁盘空间并未释放的解决办法 1 问题 当发现linux系统中存在大文件 磁盘空间快满了后 一般会使用rm rf xxx 将大文件删除 但是删除后通过df h 发现磁盘空间并未释放 2 解决办
  • React中实现流程图(第三方库)

    React简单实现可拖拽流程图 下载第三方库 react flow yarn add react flow 准备两个文件 1 index tsx 组件入口 2 mock js 测试数据 index tsx文件代码 index js impo
  • Java 根据经纬度 角度 距离求另一个点坐标

    度换成弧度 param Float d 度 return Float 弧度 private static double rad double d return d Math PI 180 0 弧度换成度 param Float x 弧度 r
  • file_include(攻防世界)

    使用php filter 发现不行 猜测应该被过滤了 继续尝试 发现read base64 encode等关键字符被过滤了 了解到php中有两种转换器 发现string被过滤 只能使用convert了 convert 过滤器支持conver
  • Android异常:android.os.NetworkOnMainThreadException

    Android 4 1项目 使用新浪微博分享时报 android os NetworkOnMainThreadException 网上搜索后知道是因为版本问题 在4 0之后在主线程里面执行Http请求都会报这个错 也许是怕Http请求时间太
  • ReferenceError: fetch is not defined

    在使用fetch时 报错fetch is not find 根据https stackoverflow com questions 48433783 referenceerror fetch is not defined的回答 通过安装 使
  • 开源介绍

    一 什么是开源 开源 Open Source 开放源码 被非赢利软件组织 美国的Open Source Initiative协会 注册为认证标记 并对其进行了正式的定义 用于描述那些源码可以被公众使用的软件 并且此软件的使用 修改和发行也不
  • HDU - 1024 Max Sum Plus Plus(区间dp)

    区间dp 题意 在n个数里选出连续的m组数使其和最大 思路 dp i j 表示分i个组时前j个数的最大值 所以有递推方程dp i j max dp i 1 k w j dp i j 1 w j 其中k取1 2 3 j 1 把第j个数当做新的
  • 目标检测(三)损失函数

    目标检测 三 损失函数 开始 一 匹配策略 二 损失函数 三 Hard negative mining 总结 开始 内容参考 Datawhale Task03 化劲儿 损失函数设计 一 匹配策略 我们要想让其预测类别和目标框信息 我们先要知
  • 如何使用multipart/form-data格式上传文件

    有时 在网络编程过程中需要向服务器上传文件 Multipart form data是上传文件的一种方式 Multipart form data其实就是浏览器用表单上传文件的方式 最常见的情境是 在写邮件时 向邮件后添加附件 附件通常使用表单