当提交带文件的的form(enctype="multipart/form-data")时,不能获得参数的解决办法
来源:互联网 发布:mac双系统如何删除 编辑:程序博客网 时间:2024/05/21 10:48
我们在提交文件时,通常需要提交其他的参数、
比如说下面这个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);
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处理表单提交内容
最好自己模拟一下,看一下我上面两张图对应的数据,模拟出来很容易就懂了
0 0
- 当提交带文件的的form(enctype="multipart/form-data")时,不能获得参数的解决办法
- Ajax 提交 form ENCTYPE="multipart/form-data" 的方法
- enctype="multipart/form-data"中Form参数的获取
- 在form里提交文件的时候一定要写 enctype="multipart/form-data"
- 当form为enctype="multipart/form-data"时的代码
- 当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到
- 当form里增加enctype="multipart/form-data"时,上传文件与其他表单数据的研究
- enctype="multipart/form-data" 文件上传,获取form 表单参数的问题
- Enctype=multipart/form-data 的作用
- Enctype=multipart/form-data 的作用
- enctype=“multipart/form-data”的使用
- 含有文件的表单处理(ENCTYPE="multipart/form-data")
- 根据在Struts 1中源碼查找文件上傳的控制流程,当FORM中设定enctype=multipart/form-data的情况下,不能获得表单的值的解決
- 表单form的enctype="multipart/form-data"使用体会
- form 中Enctype=multipart/form-data 的作用
- form 中Enctype=multipart/form-data 的作用
- form 中Enctype=multipart/form-data 的作用
- html form 中Enctype=multipart/form-data 的作用
- MySQL动态创建分区
- archlinux下ionic build android---坑爹错误
- 欢迎使用CSDN-markdown编辑器
- android Toast显示消息的几种方法
- 纯CSS设置Checkbox复选框控件的样式
- 当提交带文件的的form(enctype="multipart/form-data")时,不能获得参数的解决办法
- Longest Substring Without Repeating Characters: 12ms
- js验证一段字符串既有数字也有英文的正则表达式
- solr配置中文分词器IK Analyzer
- 使用nginx后如何在web应用中获取用户ip及原理解释
- UIView.h翻译
- OJ第四批——Problem A: 多重继承 日期与时间
- iOS项目工程中创建Framework库文件
- 轻量级JavaEE企业应用实战(第四版)