enctype属性
我们平常在使用form表单时会有一个enctype属性,其默认是application/x-www-form-urlencoded
w3c对这个编码的定义是空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值,http服务器是使用ASCII编码传输数据的,其数据是按照key1=val1&key2=val2 的方式进行编码,后端request.getparameter(key)就可以获取值了,也是最常用的。
其次我们看看text/plain
空格转换为 "+" 加号,但不对特殊字符编码,也就是说是传送纯文本,完全不会转义。
最后也是最重要的,multipart/form-data
我们上传图片必须要使用这个编码,如果不设置的话,会无法接收到图片,而这个的定义是不对字符进行编码,所以可以理解成原样传送。
这里使用默认的application/x-www-form-urlencoded接收数据时会接受不到图片,当你写入到文件时,会发现文件是空的,也就是说,输入流里面并没有接收到图片,所以这时就需要使用multipart/form-data。这样的话就会在输入流里接收到并且可以写入到文件
另外这里还有一个问题就是当设置为multipart/form-data,在接收其他参数时会有问题,比如输入姓名,由于没有进行编码,相当于直接传过来了二进制数据,那么后台也当然无法获取到,这里后台也有方法可以解决,具体的代码在后面的博客会写。