【转】HTML中的form表单的两种enctype属性

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

最近做项目时,发现手机客户端通过http协议post方式上传数据到服务端,在服务器端通过request.getInputStream()能获取到相应的数据,但用request.getParameter()却获取不到数据。这是怎么回事呢,后来发现这种情况跟form表单的属性 enctype有关系。

HTML中的form表单有一个关键属性 enctype=application/x-www-form-urlencoded 或multipart/form-data。

 

1、enctype="application/x-www-form-urlencoded"是默认的编码方式,当以这种方式提交数据时,HTTP报文中的内容是:

Html代码   收藏代码
  1. <span style="font-size: small;">POST /post_test.php HTTP/1.1   
  2. Accept-Language: zh-CN  
  3. User-Agent: Mozilla/4.0   
  4. Content-Type: application/x-www-form-urlencoded   
  5. Host: 192.168.12.102  
  6. Content-Length: 42  
  7. Connection: Keep-Alive  
  8. Cache-Control: no-cache  
  9.    
  10. title=test&content=%B3%AC%BC%B6%C5%AE%C9%FA&submit=post+article   
  11. </span>  

Servlet的API提供了对这种编码方式解码的支持,只需要调用ServletRequest 类中的getParameter()方法就可以得到表单中提交的数据。


2、在传输大数据量的二进制数据时,必须将编码方式设置成enctype="multipart/form-data",当以这种方式提交数据时,HTTP报文中的内容是:

 

Html代码   收藏代码
  1. <span style="font-size: small;">POST /post_test.php?t=1 HTTP/1.1  
  2. Accept-Language: zh-CN  
  3. User-Agent: Mozilla/4.0    
  4. Content-Type: multipart/form-data; boundary=---------------------------7dbf514701e8  
  5. Accept-Encoding: gzip, deflate  
  6. Host: 192.168.12.102  
  7. Content-Length: 345  
  8. Connection: Keep-Alive  
  9. Cache-Control: no-cache  
  10.    
  11. -----------------------------7dbf514701e8  
  12. Content-Disposition: form-data; name="title"  
  13. test  
  14. -----------------------------7dbf514701e8  
  15. Content-Disposition: form-data; name="content"  
  16. ....  
  17. -----------------------------7dbf514701e8  
  18. Content-Disposition: form-data; name="submit"  
  19. post article  
  20. -----------------------------7dbf514701e8--</span>  

如果以这种方式提交数据就要用request.getInputStream()或request.getReader()来获取提交的数据 用 request.getParameter()是获取不到提交的数据的。

 

 

最后注意request.getParameter()、request.getInputStream()、request.getReader()这三种方法是有冲突的,因为流只能被读一次。
比如:
当form表单内容采用enctype=application/x-www-form-urlencoded编码时,先通过调用request.getParameter()方法获取数据后,再调用request.getInputStream()或request.getReader()已经获取不到流中的内容了,因为在调用 request.getParameter()时系统可能对表单中提交的数据以流的形式读了一次,反之亦然。

 

当form表单内容采用enctype=multipart/form-data编码时,调用request.getParameter()获取不到数据,即使已经调用了request.getParameter()方法也可以再通过调用request.getInputStream()或request.getReader()获取表单中的数据,但request.getInputStream()和request.getReader()在同一个响应中是不能混合使用的,如果混合使用会抛异常的。

Form表单enctype属性的取值及作用 在文件上传功能的实现中,表单中的enctype属性的取值让不少初学者一头雾水,此文分享了enctype属性的三个取值,有助于初学者深入了解文件上传功能和文件上传漏洞的相关知识。 阅读详情

相关推荐

实战详细讲解Qt插件plugin的编写与用法

qt插件的开发,可以说是动态库的开发,因为调用方式类似,多熟悉一下,利用Qt框架开发很简单的。在想想这种调用过程有的熟悉,比如公司买了一堆摄像头,公司要对摄像头进行二次开发,实现自己想要的功能,集成到一套设备里去,然后在卖给用户。此时厂商肯定会提供开发文档,并给你SDK包(软件开发工具包), 包里你会发现只有头文件和一堆库文件,没有源文件,因为实现的过程是产商公司保密的,给你看还得了。所以都封装成了库的形式给你调用,如静态库或者动态库。

qq_44667165的博客 1万+

request.getParameter()获取不到数据的问题

最近做项目时,发现手机客户端通过http协议post方式上传数据到服务端,在服务器端通过request.getInputStream()能获取到相应的数据,但用request.getParameter()却获取不到数据。这是怎么回事呢,后来发现这种情况跟form表单属性 enctype有关系。 HTML中的form表单有一个关键属性 enctype=application/x-www-form...

怡然自得 4945

中远麒麟堡垒机 SQL注入漏洞复现

中远麒麟堡垒机/baoleiji/api/tokens接口处存在sql注入漏洞,未经身份认证的攻击者可通过该漏洞获取数据库敏感信息及凭证,最终可能导致服务器失陷。

0xSec 2966

解决post请求httpServletRequest对象.getParameter获取不到参数!

httpServletRequest对象.getParameter()接收post请求参数,

TangMonk的博客 4501

request.getParementer()获取不到值的原因及解决办法

想通过ajax的POST方式把前端值传到后端,却发现后端request.getParameter()获取不到值.$(document).ready(function () { $("button").click(function () { var userinfo=[ {"username":"test1"}, {"userna

yuluolishang的博客 2万+

request.getParameter("key")拿不到值的问题

今天在写一个form表单的时候,提交到后台之后发现使用request.getParameter()拿到的值全部为null 错误原因是这个form表单中有一个文件(图片)上传的项,form表单中有一个属性enctype="multipart/form-data"。 &lt;form name="articleform" class="form-horizontal" action="${pag...

生活不止眼前的苟且 2767

VUE前端发送post请求,在SQL注入过滤时,后台通过request.getparamter无法获取属性值的解决

也就是从请求中获取流以后,流被filter中的这个 inputStreamToString(InputStream in) 这个方法处理后就被“消耗”了,这会导致,chain.doFilter(request, res)这个链在传递 request对象的时候,里面的请求流为空,导致责任链模式下,其他下游的链无法获取请求的body,从而导致程序无法正常运行,这也使得我们的这个filter虽然可以获取请求信息,但是它会导致整个应用程序不可用。而在filter过滤器使用输入流来获取数据的时候,又发生了。

1362

form表单中的enctype属性

form表单中的enctype属性 enctype就是encodetype就是编码类型的意思。   multipart/form-data是指表单数据中由多部分构成,既有文本数据,又有文件等二进制数据   需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-...

qq_42216575的博客 1万+

form表单中的enctype=“multipart/form-data“什么意思?

enctype就是encodetype就是编码类型的意思。 multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。 需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data,才能完整的传递文件数据。 applicati...

铁马冰河入梦来 5万+

为什么上传文件的表单需要设置enctype="multipart/form-data"

在学习PHP文件上传的过程中发现,HTML表单需要设置enctype="multipart/form-data"这个属性,虽然不这么设置的确无法上传,但这是为什么呢?

4万+

htmlform表单Enctype属性的用法

form表单中的Enctype属性指定将数据发回到服务器时浏览器使用的编码类型。  下面是它的取值说明:  multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。  application/x-www-form-urlenc

3880

form表单中的enctype属性form表单中的enctype="multipart/form-data"什么意思

一、form表单的作用 1、<form>表单标签使用在一个网页中数据提交标签,这就不用多说了 2、form表单在提交时: 1)、先把form表单里的表单元素的name属性和value属性进行收集。 2)、按照enctype属性的设置,选择合适的编码方式,对数据进行编码,放在请求头里 3)、浏览器进行发送。 二、enctype属性 enc...

jiang7701037的博客 1593

form上传表单enctype属性编码值

form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype="application/x- www-form-urlencoded".这个属性管理的是表单的MIME编码,共有三个值可选:   ①application/x-www-form-urlencoded (默认值)   ②multipart/form-data   ③text/pla...

voice的博客 1293

htmlform表单enctype属性

首先知道enctype这个属性管理的是表单的MIME编码。共有三个值可选: 1、application/x-www-form-urlencoded 2、multipart/form-data 3、text/plain 其中application/x-www-form-urlencoded是默认值,作用是设置表单传输的编码。例如我们在AJAX中见过xmlHttp.setRequestHead

stc89cxx的博客 1114

Resource interpreted as Document but transferred with MIME type application/json

使用谷歌Chrome浏览器报错:Resource interpreted as Document but transferred with MIME type application/json: "http://localhost:8080/lzzcms/bak/trueAddContnet". jquery.easyui.min.js:6844,截图如下: 先说下出现报这个错误...

xiaozhuangyumaotao的博客 7215

Form表单enctype属性

Form表单enctype属性: 我们来看看W3CShool上对表单属性enctype的定义: 1)定义和用法: a>enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。 b>默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前, 所有字符都会进行编码(空格换为 "+" 加号,特殊符号换为 A

Benjamin——前端攻城师 2248

HTML里面form表单name,action,method,target,enctype属性用法

HTML里面的form表单里面的name,target,enctype,method以及action的用法 HML表单HTML里面的表单HTML页面与浏览器交互的重要手段,表单主要提交一些客户端的数据。 表单表单域并不具有排版能力,表单网页的制作最终还是要由表格组织起来。 表单的主要功能是收集信息,一般的表单由两部分组成,一是描述表单元素的HTML代码,二是客户端的...

atoqkolgpvlif6615的博客 738

HTML 教程系列第 21 篇】HTML 中的表单标签 form

一:什么是 HTML 中的 form 标签。 二:form 标签属性有 action、method、name、target、enctype

“Allen Su”的博客 1722

HTML教程:form表单Enctype属性的用法

【51Test.NET-HTML教程:form表单Enctype属性的用法】: 关于Form表单Enctype属性的用法:  form表单中的Enctype属性指定将数据发回到服务器时浏览器使用的编码类型。  下面是它的取值说明:  multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。  application/x-www-form

hujiao_jingling的专栏 793
上一篇: 【原创】往windows运行窗口添加自定义程序
下一篇: 【转】UltraEdit正则表达式介绍及实例
belber
博客等级 码龄16年 3粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值