文件上传中form表单的enctype="multipart/form-data"  为二进制文件传输

在struts2中 表单取值比较简单  因为框架已经帮我们做好的表单域的取值

但是在非框架中 取值就相对麻烦了 不能通过request.getParameter(name) 去取值

不过我们可以使用相关的jar去实现文件的上传和下载  比如 DiskFileUpload

前段时间 在做文件上传的时候 需要传递一个复选框的值 以及 相同名字的几个textarea的值

在非上传中 我们可以通过request.getParameterValues(name)方法 把需要的值变为一个字符串数组

但是DiskFileUpload中没有相关的方法 通过参考项目中以前的方法 再加以修改 实现了相关功能

boolean success = false;
Map pMap = new LinkedHashMap();//form Field maprequest.setCharacterEncoding("GBK");try {//通过FileUpload组建封装表单值到map对象中DiskFileUpload fu = new DiskFileUpload();fu.setSizeMax(30 * 1024 * 1024);// 设置最大文件尺寸,这里是14MBfu.setSizeThreshold(1024 * 64);// 设置缓冲区大小,这里是64kbList fileItems = fu.parseRequest(request);// 得到所有的fieldIterator itor = fileItems.iterator();// 依次处理每一个fieldwhile (itor.hasNext()) {FileItem fi = (FileItem) itor.next();if (fi.isFormField()){//表单处理if(pMap.get(fi.getFieldName())!=null){pMap.put(fi.getFieldName(),pMap.get(fi.getFieldName())+"$"+org.apache.commons.lang.StringEscapeUtils.escapeSql(fi.getString("GBK")));}else{pMap.put(fi.getFieldName(),org.apache.commons.lang.StringEscapeUtils.escapeSql(fi.getString("GBK")));}} else {//附件处理if (fi.getName() != null) {if (fi.getName().indexOf(".") != -1) {//有扩展名的指定类型文件pMap.put(fi.getFieldName(), fi);}}        }}

通过DiskFileUpload中的fu.parseRequest(request)方法 把request中的表单属性 转化为List对象

然后遍历fileItems 把对应表单的值放在map对象中 判断map是否存在某个key 存在就拼接value

if(pMap.get(fi.getFieldName())!=null){pMap.put(fi.getFieldName(),pMap.get(fi.getFieldName())+"$"+org.apache.commons.lang.StringEscapeUtils.escapeSql(fi.getString("GBK")));}else{pMap.put(fi.getFieldName(),org.apache.commons.lang.StringEscapeUtils.escapeSql(fi.getString("GBK")));}

这样我们就实现了表单中相同name的标签的取值问题

接下来就是取值 封装在实体类中

int exam_year = Integer.parseInt(pMap.get("exam_year").toString());
String name = pMap.get("exam_year").toString();

按照正常的思路我们需要这样进行取值  假如表单的属性就几个还好  假如很多呢?

而且表单中有的属性可以为空  在取值封装到实体类中时候   如果map的取值为空 就会报错

因此还要对map对象进行判断

if(pMap.get("q_paper_type")!=null){
    q_paper_type =Integer.parseInt(pMap.get("q_paper_type").toString()); 
 }

非常的麻烦

参考以前的项目 发现apache commons 的一个jar    commons-beanutils-1.7.0.jar

使用BeanUtils轻松实现实体类对象的封装

引用<%@ page import="org.apache.commons.beanutils.BeanUtils" %>

question 是我们的实体类对象

BeanUtils.populate(question, pMap);

就是这么简单 而且会初始化对应的字段  map中某些属性为空时 也不会报错

附上文件的操作:

 //附件上传if(pMap.get("file")!=null){FileItem fi = (FileItem) pMap.get("file");String attachExtName = org.apache.commons.lang.StringUtils.lowerCase(fi.getName().substring(fi.getName().lastIndexOf(".")));if (!".zip".equals(attachExtName)) {out.print("<script>alert('文件类型错误,请上传zip格式文件!');history.go(-1);</script>");return; //解压缩,格式错误,非zip文件}if(fi.getSize()>3*1024*1024){out.print("<script>alert('zip文件不能超过3M!');window.close();</script>");return; //解压缩,格式错误,非zip文件}question.setBodyPackage(fi.getInputStream());}

-------------------------------------------------------

下面是一个公用方法 任何实体类都可以复制这段代码

public static void paramPrepare(Object q, HttpServletRequest request) throws Exception {// request 变量和附件处理,生成q对象Map pMap = new HashMap();// form Field mapEnumeration enu = request.getParameterNames();while (enu.hasMoreElements()) {Object key = enu.nextElement();pMap.put(key, ParamUtils.getParameter(request, (String) key));}BeanUtils.copyProperties(q, pMap);
}
User u = new User();
User.paramPrepare(user,request);

把request的信息封装到实体对象里面

DiskFileUpload + BeanUtils 轻松实现无框架文件上传表单取值相关推荐

  1. 文件上传表单 上传文件的细节 文件上传下载和数据库结合

    1 文件上传表单    1)上传文件的本质是文本复制的过程    2)技术层面,在Java中一定会用到IO操作,主要以二进制方式读写    3)传统方式下,对于上传文件字段不同的浏览器有着不同的解析方 ...

  2. dwz 表单提交 html,DWZ文件上传表单提交

    文件上传表单提交 因为Ajax不支持enctype="multipart/form-data" 所以用隐藏iframe来处理无刷新表单提交. 或 服务器端响应 DWZ-v1.2版本 ...

  3. 利用mysql实现上传和下载_文件上传表单 上传文件的细节 文件上传下载和数据库结合...

    1 文件上传表单 1)上传文件的本质是文本复制的过程 2)技术层面,在Java中一定会用到IO操作,主要以二进制方式读写 3)传统方式下,对于上传文件字段不同的浏览器有着不同的解析方式,例如: IE6 ...

  4. html js文件域val,js实现文件上传表单域美化特效

    一款效果非常时尚的文件上传表单域美化特效,下面给出制作的简要教程. 先上几个效果饱饱眼福: 使用方法 这些文件上传域的美化使用的方法都是隐藏原生的元素,然后使用一个元素来制作美化效果. @H_502_ ...

  5. 【Flask】 结合wtforms的文件上传表单

    表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的. ...

  6. php 美化js文件,js实现文件上传表单域美化特效_javascript技巧

    一款效果非常时尚的文件上传表单域美化特效,下面给出制作的简要教程. 先上几个效果饱饱眼福: 使用方法 这些文件上传域的美化使用的方法都是隐藏原生的元素,然后使用一个元素来制作美化效果. HTML结构 ...

  7. SpringMVC之表单提交===③===多文件上传表单

    上文简单介绍了springmvc单文件上传表单 ,本文继续介绍多文件上传表单.包含单文件上传的表单已经能够满足大部分功能需求,但任然不够完善.实际业务中可能会包含多个文件同时上传,例如:商家在电商平台 ...

  8. SpringMVC之多文件上传表单

    上文简单介绍了springMVC之单文件上传 ,本文继续介绍多文件上传表单.包含单文件上传的表单已经能够满足大部分功能需求,但任然不够完善.实际业务中可能会包含多个文件同时上传,例如:商家在电商平台申 ...

  9. dwz 表单提交 html,dwz 文件上传表单提交 分析

    众所周知,因为Ajax不支持enctype="multipart/form-data".所以如果想采用无刷新的方式提交文件,Ajax是不行的.采用变通,也是最简单有效的方式是在页面 ...

最新文章

  1. php方行图片裁剪为圆形,如何将图片裁成圆形、矩形……各种形状?
  2. win10 无法安装/启用 .net framework 3.5 的一种解决方案
  3. 用Rocker制作模板
  4. 2021年北京学校高考成绩查询,2021年北京高考成绩查询时间及入口【官方】
  5. linux内存和flash区别,嵌入式Linux概念NOR/NAND Flash的差别
  6. LeetCode(62):不同路径
  7. 控制台应用程序《石头剪刀布》——新手,
  8. python分词代码
  9. 多边形离散化函数和判断凹凸点的函数(原创亲测正确)
  10. outlook左侧栏隐藏_Outlook 2007待办事项栏中没有全天活动
  11. [转] Delaunay三角剖分理论知识
  12. 苏州新导RFID化工厂人员定位系统中的应用,化工厂人员定位你get到了吗?
  13. 新浪微博开发(五)AppList界面
  14. 迭代重建算法中投影矩阵的计算
  15. 美国留学申请干货--转自 AdmitWrite留学(无图)
  16. 【Java开发】 Mybatis-Plus 02:Mapper-CRUD+自动填充+乐观锁
  17. 小黄鸭调试法:拯救那些开发心里“无力回天”的bug
  18. 我们都忽略了Html5的力量,如果只看成一种技术就大错特错了!
  19. Spring Cloud 加密encrypt和解密decrypt
  20. 【零基础学Python】海龟画图篇 :第十九节--海龟画图实际应用|用法总结

热门文章

  1. Java8中关于Paths、Path等工具类的简单使用
  2. 《腾讯方法》读书笔记和书评
  3. JS——返回上一页页面不刷新
  4. 重修-龙珠计划机器学习训练营task3-LightGBM学习笔记
  5. 实体门店品牌如何用企业微信私域SCRM系统布局微信生态
  6. js切割字符串,提取字符串的参数对象(举例针对url)
  7. 凹凸世界服务器维护到几点,凹凸世界手游2021年7月28日版本更新不停服维护公告-凹凸世界手游2021年7月28日更新了什么-Appfound...
  8. 华为p20p手机支持鸿蒙系统,华为官宣好消息,20款手机适配新系统,未来还能升级鸿蒙OS...
  9. vb.net 实现剪切文件_这个软件让手机和电脑间传输文件超方便,重点是体积小没广告...
  10. 草莓铃音 v5.0.0