form表单enctype属性用法详解

发布时间:2019-07-20编辑:脚本学堂
本文介绍了form表单中enctype属性的详细用法,常见的设置有application/x-www-form-urlencoded和multipart/form-data两种,默认为前者。

form的enctype属性:客户端博览器对form的编码措施。

客户端浏览器把form编码后,再发送给服务器处理。
常见的设置有application/x-www-form-urlencoded和multipart/form-data两种,默认为前者。
application/x-www-form-urlencoded方式:不涉及及文件传输时,一般设置为这种方式。依据w3c规范,这种编码方式如下编码:
空格被转换成“+”,非字母数字字符轮换了`%HH',一个百分号和两个代表的ASCII码十六进制数字字符,换行表示为“CR LF”对。names/values对最后以“=”连接内部ie.ieltsuk.org,以“&”分隔表面。

multipart/form-data措施:万一必需传输许多的二进制数据可能传输非ASCII文本时,必需批准这种编码方式。
这种编码方式如下编码:
把form的内容瓜分成段,每段代表一个input属性,每个段落间用分隔符隔开。
其中每个段落登记这个段落的消息,例如Content-Disposition,name,Content-Type等等,还有这个段落与下个段落的分隔符boundary,以及这个段落的value数据。

例如,这个form:
 

复制代码 代码示例:
<FORM action=""
enctype="multipart/form-data"
method="post">
姓名:<INPUT type="text" name="name"><BR>
文件: <INPUT type="file" name="files"><BR>
<INPUT type="submit" value="Send"> <INPUT type="reset">
</FORM>
 

如果填入姓名为“user”,上传一个名目为imagemom.imomc.com.jpg的文件后提交,这个form将被编码成如下(切实中未曾行号):
1 Content-Type: multipart/form-data; boundary=AaB03x
2
3 --AaB03x
4 Content-Disposition: form-data; name="name"
5
6 user
7 --AaB03x
8 Content-Disposition: form-data; name="files"
9 Content-Type: image/pjpeg; boundary=BbC04y
10
11 ... image.jpg的内容...
12 --BbC04y--
13 --AaB03x--

各行解析如下:
1. 设置form的编码种类和分隔符。

2. 无

3. 一个form段(form切身的设置)的告终符号

4. “姓名”段的大约设置

5. 无

6. “姓名”段的值

7. 一个form段(姓名段)的告终符号

8. “文件”段的大约设置

9. “文件”段的高级设置 Content-Type设置这一段的”值”(image.jpg的byte[]数据)的解析措施。即服务器端接收到这段byte[]后,解析为文件时抉择的mime种类。boundary设置文件段的分隔符,这个分隔符用在有多个文件上传时,文件之间的分隔符号。

10. 无

11. image.jpg的内容

12. 一个文件段(image.jpg)的告终符号

13. 一个form段(文件段)的告终符号。

关于第9步的Content-Type:
在Struts开发中,文件上传等闲在前台利用html:file标签,在ActionForm的org.apache.struts.upload.FormFile接口来接收,FormFile接口供给的一个措施:getContentType()。这个措施的作用即便获得这里的Content-Type。String s = new String ("Text here");

再做程序时,需要既要上传文件。又要获取HIDDEN 数据。
可是本页面总是 无法 获取的HIDDEN数据
最后发现:
ENCTYPE="multipart/form-data" 引起。

以上介绍了form表单中enctype属性的用法,希望对大家有所帮助。