当提交带文件的的form(enctype="multipart/form-data")时,不能获得参数的解决办法

我们在提交文件时,通常需要提交其他的参数、

比如说下面这个form表单中

表单
有时间,选择那一项病例,图片这几个参数,因为需要上传图片,所有我们需要把form表单加上(enctype="multipart/form-data")这句话【如果不加这句话,我们没法解析form表单中的内容】。加上这句话之后,那么问题来了。
如果你想通过post请求的方式,提交表单,我们在后台通过request.getPararequest.getParameter("")方法将得不到参数(为null)。为什么,我们看一个form表单有enctype="multipart/form-data和没有enctype="multipart/form-data这句话,提交方式将有什么不同
没有enctype="multipart/form-data,提交时,数据是这样的
 
如果form表单有enctype="multipart/form-data这个属性,提交时,数据是这样的
 
我们可以看出,提交的方式是不同的,上面的是FORM DATA,里面处着键值对这样的一些我们提交的参数,儿下面的是Request Payload,里面的数据又是一个个的对象。里面的参数被封装成了一个个的对象,我们用简单的request.getParameter()当然取不到值了。这是我们需要用到一个文件处理jar包-----commons-fileupliad。
里面有这么两个对象
DiskFileItemFactory factory = new DiskFileItemFactory();
 ServletFileUpload upload = new ServletFileUpload(factory);
这时我们就可以通过
List fileItems = upload.parseRequest(request);
将Request Payload里面的对象解析成一个List<FileItem>,也就是Request Payload里面的每一块参数都变成了一个FileItem参数
这个FileItem对象有很多方法,常用的几个是
(1)fileItem.isFormField()
这个函数用来判断FileItem对应的表单中的参数是不是一个普通域,也就是对应的<input type="">中的type不是file,就是一个普通域,返回真。如果是file,返回假
(2)String filedName = fileItem.getFieldName()
这个函数得到的是你上传的input里面的name值,比如说<input type="text" name="userName">,就是userName这个值了
(3)String name = fileItem.getName()
这个函数,返回的是上传文件的名字,比如说你上传的文件名是一个名字为“中国龙”的jpg图片,那么返回值就是中国龙.jpg
(4)String str = fileitem.getString()
这个函数返回值是<input >里面的value值,比如说<input type="text" value="我爱乐逍遥">,得到的值就是“我爱乐逍遥”这个字符串
不过直接这样用,如果值是汉字,会是乱码的。可以将得到的str转码一下
str = new String(str.getBytes("ISO8859-1")))
 
 
用到的知识有,form表单提交文件,commons-fileupliad处理表单提交内容
最好自己模拟一下,看一下我上面两张图对应的数据,模拟出来很容易就懂了
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自blog.csdn.net/jixinhuluwa/article/details/46729131