文件上传的multipart/form-data属性,你理解了吗
form表单经常用于前端发送请求,比如:用户填写信息、选择数据、上传文件,对于不同的场景,上传数据的格式也会有些区别。
action
action 表示该请求的 url 地址,定义在form上,请求的URI,可以写完整,也可以以斜线开头,会自动拼接域名端口号。
本地通过 nodejs 在8000端口起了一个服务,当 button 的 type 为 submit 时,点击后会默认发送请求。
<form action="http://127.0.0.1:8000">
账号: <input name="username">
密码:<input name="password">
<button type="submit">提交</button>
</form>
在浏览器中表单就是这样显示的,在账号密码的输入框中分别输入内容

点击提交按钮时,会将输入的内容自动拼接在 action 参数之后

method
method 属性规定了此次 HTTP 请求的方法。
- GET 参数直接拼接在 url 后面,默认的形式
- POST 参数放在请求体中
<form action="http://127.0.0.1:8000" method="post">
账号: <input name="username">
密码:<input name="password">
<button type="submit">提交</button>
</form>
当使用POST请求时,填写信息点击提交按钮,参数不再拼接到 url 后面,而是放到 body 中,仍然以 & 拼接。

enctype
enctype 决定着POST请求时,请求体的编码方式。
- application/x-www-form-urlencoded 不写时默认属性,用&分隔参数,用=分隔键和值,字符用URL编码方式进行编码,GET请求和POST请求都可用
- multipart/form-data 多用于文件上传,用于POST请求
<form action="http://127.0.0.1:8000" method="post" enctype="multipart/form-data">
昵称:<input name="nickname">
头像:<input type="file" name="photo">
<button type="submit">提交</button>
</form>
填写信息并选择文件

当请求方法改为 get 时,url 上只拼接了上传文件的名称,没有将文件的具体内容发送到服务器端。

当请求方法为 post 时,multipart/form-data 才有着其作用,通过抓包工具追踪的HTTP流来看,请求报文的 Content-Type 中,boundary 后面有一串字符,这个字符就用于拼接用户输入、上传的数据

而上传的图片信息,将以二进制数据的形式传递

每一项数据通过两个短横线+ bounary= 后面的字符相隔,这里是----WebKitFormBoundaryBFUEET96fRvnOc3r,服务器获取数据时,通过这个标识来截取即可。
以上就是 文件上传的multipart/form-data属性的内容 , 更多有关 前端、网络协议 的内容可以参考我其它的博文,持续更新中~
文件上传的multipart/form-data属性,你理解了吗的更多相关文章
- js文件上传原理(form表单 ,FormData + XHR2 + FileReader + canvas)
目录 form表单上传 FormData + XHR2 + FileReader + canvas 无刷新本地预览压缩上传实例 目前实现上传的方式 浏览器小于等于IE9(低版本浏览器)使用下面的方式实 ...
- 表单文件上传编码方式(enctype 属性)
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码. 如下: <form action="upload.php" method="post&quo ...
- Spring MVC 文件上传简单示例(form、ajax方式 )
1.Form Upload SpringMVC 中,文件的上传是通过 MultipartResolver 实现的,所以要实现上传,只要注册相应的 MultipartResolver 即可. Multi ...
- ExtJs文件上传(Ext.ux.form.FileUploadField)
Ext.ux.form.FileUploadField = Ext.extend(Ext.form.TextField, { /** * @cfg {String} buttonText The b ...
- SpringMVC 文件上传(Multipart)
作者QQ:1095737364 QQ群:123300273 欢迎加入! 平时用的上传一般是输入流和输出流上传,今天使用的是transferTo方法: Multipart请求是在控制器实例 ...
- 文件上传时jquery.form.js中提示form.submit SCRIPT5: 拒绝访问
利用其它控件触发file的click事件来选择文件后,使用jquery.form.js中的submit方法提交时IE报错:form.submit SCRIPT5: 拒绝访问,其它浏览器正常, < ...
- Spring 4 官方文档学习(十一)Web MVC 框架之multipart(文件上传)支持
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-multipart 1.简 ...
- 005-html+js+spring multipart文件上传
一.概述 需求:通过html+js+java上传最大500M的文件,需要做MD5 消息摘要以及SHA256签名,文件上传至云存储 1.1.理解http协议 https://www.cnblogs.co ...
- form里面文件上传并预览
其实form里面是不能嵌套form的,如果form里面有图片上传和其他input框,我们希望上传图片并预览图片,然后将其他input框填写完毕,再提交整个表单的话,有两种方式! 方式一:点击上传按钮的 ...
- 表单多文件上传样式美化 && 支持选中文件后删除相关项
开发中会经常涉及到文件上传的需求,根据业务不同的需求,有不同的文件上传情况. 有简单的单文件上传,有多文件上传,因浏览器原生的文件上传样式及功能的支持度不算太高,很多时候我们会对样式进行美化,对功能进 ...
随机推荐
- 使用 Sa-Token 完成踢人下线功能
一.需求 在企业级项目中,踢人下线是一个很常见的需求,如果要设计比较完善的话,至少需要以下功能点: 可以根据用户 userId 踢出指定会话,对方再次访问系统会被提示:您已被踢下线,请重新登录. 可以 ...
- 认识CPU底层原理(1)——MOSFET
本文为B站UP主硬件茶谈制作的系列科普<[硬件科普]带你认识CPU>系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除 近年来,由于国内外各种因素影响,半导体行业逐渐被推向风口 ...
- nginx 反向代理proxy_pass 后加斜杠和不加斜杆的区别
今日准备使用nginx 将上次使用docker 部署的一个vue项目进行地址代理,让他看起来高达尚一点,原本docker打包的镜像只是向外暴露了一个8191的端口,访问的时候就只能是 http://w ...
- 【python基础】复杂数据类型-列表类型(增删改查)
1.初识列表(list) 列表由一系列按特定顺序排列的数据元素组成.可以将任何类型数据元素加入列表中,其中的数据元素之间没有任何关系.鉴于列表通常包含多个数据元素,给列表指定一个表示复数的名称是个不错 ...
- 案例分享-被*队友的mybatis蠢哭的一天
昨晚加班的时候被队友拉着看一个mybatis的问题,耗费了我一个小时时间,最后差点没被我打死,实在是觉得滑稽,今天回家写下来跟大伙分享一下. 问题现象 Invalid bound statement ...
- 现代 C++ 性能飞跃之:移动语义
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/Xd_FwT8E8Yx9Vnb64h6C8w 带给现代 C++ 性能 ...
- 纠删码技术在vivo存储系统的演进【上篇】
作者:vivo 互联网服务器团队- Gong Bing 本文将学术界和工业界的纠删码技术的核心研究成果进行了相应的梳理,然后针对公司线上存储系统的纠删码进行分析,结合互联网企业通用的IDC资源.服务器 ...
- java调用WebService(未完成)记录篇
背景: 因工作需要和一个Sap相关系统以WebService的方式进行接口联调,之前仅听过这种技术,但并没有实操过,所以将本次开发相关的踩坑进行记录 通过一个实例来认识webservice 服务端 首 ...
- 玉 - Sliver
基操 1.启动服务端 ./sliver-server_linux 2.启用多客户端协同 new-operator --name zha0gongz1 --lhost [serverip] #生成客户端 ...
- 代理详解(java代理和CGLIB动态代理)
[代理]大家都知道,特别是在spring中aop.spring中的事务.spring解析注解@Configuration,以及最原始的解析spring.xml的配置,这些都是使用代理来进行实现的, ...