<form action="/addPro" method="post" enctype="multipart/form-data"><a>宠物(或产品)类型:</a><select id="categoryID" name="cid"></select><br/><br/><a>宠物(或产品)名字:</a><input type="text" name="cname"><br/><br/><a>一句话介绍:</a><input type="text" name="introduction"><br/><br/><a>题目:</a><input type="text" name="title"><br/><br/><a>价钱:</a><input type="text" name="price"><br/><br/><a>库存:</a><input type="text" name="stock"><br/><br/><a>状态:</a><select name="status"><option value="1">在售</option><option value="2">下架</option><option value="3">删除</option></select><br/><br/><a>头像设置:</a><input type="file" onchange="previewFile()" name="fileName"><br/><img src="${data.image}" alt="Image preview"/><br/><a>详细描述(编辑完需要在文本框右上角点保存):</a><br/><div id="editor"><p>商品详细描述</p><p>编辑完需要在文本框右上角点保存</p></div><input type="hidden" name="details" id="detail"><br/><br/><input type="submit" value="新增商品">
</form>

multipart/form-data 提交表单是采用二进制方式提交,所以一般用来上传图片操作,当在这个表单下同时上传文本,就会报错。

但是业务需要上传商品是文本和图片同时上传的。

这里要用到commons的四个包,我用Maven导入

 <!-- https://mvnrepository.com/artifact/commons-io/commons-io有关图片文本同时上传 --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency><!-- https://mvnrepository.com/artifact/commons-collections/commons-collections --><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.1</version></dependency><!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.2</version></dependency>

Java代码

主要判断每一个参数的属性,图片的则进行图片处理,文本则进行文本处理

//新增产品@RequestMapping("/addPro")public void addPro(HttpServletRequest request, HttpServletResponse response) throws IOException {//编码规范response.setContentType("text/html");
//      response.setCharacterEncoding("utf-8");Product product = new Product();//这种方法主要通过if (item.isFormField())这个条件判别文件还是非文件DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);List items = null;try {items = upload.parseRequest(request);} catch (FileUploadException e) {e.printStackTrace();} // 解析request请求Iterator iter = items.iterator();// 遍历表单中提交过来的内容while (iter.hasNext()) {FileItem item = (FileItem) iter.next();if (item.isFormField()) { // 如果是表单域 ,就是非文件上传元素String value = item.getString("UTF-8"); // 获取value属性的值,这里需要指明UTF-8格式,否则出现中文乱码问题if (item.getFieldName().equals("cid")) {// 对应form中属性的名字int categoryId = Integer.parseInt(value);product.setCategory_id(categoryId);} else if (item.getFieldName().equals("cname")) {product.setName(value);}else if (item.getFieldName().equals("introduction")) {product.setIntroduction(value);}else if (item.getFieldName().equals("title")) {product.setTitle(value);}else if (item.getFieldName().equals("price")) {BigDecimal price=new BigDecimal(value);product.setPrice(price);}else if (item.getFieldName().equals("stock")) {product.setStock(Integer.parseInt(value));}else if (item.getFieldName().equals("status")) {product.setStatus(Integer.parseInt(value));}else if (item.getFieldName().equals("details")) {product.setDetail(value);}}else {String filename = item.getName(); // 文件的名字String imgname = filename.substring(0, filename.indexOf("."));  //减去“.”后面的字符//tomcat启动位置
//              String t1 = System.getProperty("user.dir").substring(0,
//                      System.getProperty("user.dir").length() - 4);String path = request.getServletContext().getRealPath("img"); //target找到img位置Long time = Calendar.getInstance().getTimeInMillis();  //时间戳,保证文件命名不重复String imgurl = "./img/"+imgname+time+".jpg";product.setImage(imgurl);System.out.println(imgurl);File saveFile = new File(path+"/" + imgname+time+".jpg"); // 定义一个file指向一个具体的文件try {item.write(saveFile);// 把上传的内容写到一个文件中System.out.println("上传到"+path+"成功");} catch (Exception e) {/* e.printStackTrace(); */System.out.println("文件"+path+"为空");}}}if(productDaoService.addProduct(product)){PrintWriter out = response.getWriter();out.print("<script language=\"javascript\">alert('ADD SUCCESS');window.location.href='/admin/administrator'</script>");}else {PrintWriter out = response.getWriter();out.print("<script language=\"javascript\">alert('增加失败');window.location.href='/admin/addProduct'</script>");}}

Java 图片和文本同时提交到form表单multipart/form-data相关推荐

  1. java web 表单提交_Java Web 表单(form)提交问题!

    layout: java title: Java web 的form表单问题 date: 2019-12-19 16:29:36 QHQ-[问题描述]今天做Java web项目的时候,里面一个功能让我 ...

  2. # Ajax提交Form表单以及后端取值(java)

    Ajax提交Form表单以及后端取值(java) 1.ajax提交form表单:提交的按钮οnclick="denglu()"时候触发ajax方法 <script>fu ...

  3. java 提交表单_http常见的form表单请求方式

    在Web开发中,我们使用的比较多的HTTP请求方式基本上就是GET.POST. 一.http请求常见的表单文件上传形式 首先了解下application/x-www-form-urlencoded和m ...

  4. form表单、控制器中接收表单提交数据的4种方式

    Form表单 这篇文章主要讲的是form表单的提交 之前我们接触过的form表单元素是在Bootstrap框架里面,这次也将用到Bootstrap框架去布局(见图表1)通过Bootstrap框架布局呈 ...

  5. ajax提交成功清空表单,Ajax提交数据后,清空form表单

    按钮不同,页面相同,还需要显示的数据不同,这里会由于页面的缓存问题,导致,每次点开这个页面显示的数据相同. 这不是我们想要的.这就需要清楚表单数据了. 如下: $('#myform')[0].rese ...

  6. Servlet 3 HttpServletRequest HttpServletResponse 验证码图片 form表单

    目录: HttpServletRequest: 获得请求行 和 客户机信息 获得请求头中referer信息,防止盗链 获得form提交数据 请求重定向 转发 RequestDispatcher.inc ...

  7. js 提交form表单,js更改form表单的action属性

    2019独角兽企业重金招聘Python工程师标准>>> js 提交form表单 <s:form id="formID1" action="favo ...

  8. JS 提交form表单

    源码实例 一: javascript   页面加裁时自动提交表单 Form表单: <form method="post" id="myform" acti ...

  9. vue自动提交表单_vuejs 动态提交form表单问题

    通过v-for动态循环某个对象,添加隐藏的元素到form中,然后通过 document.getElementById('form').submit()来提交,此时发现另一个页面接收不到参数. 而通过d ...

最新文章

  1. Bootstrap系列 -- 34. 按钮下拉菜单
  2. 1067: [SCOI2007]降雨量 - BZOJ
  3. c++编程例子_如何开始厉害的C语言编程?大神都是这样开始的!
  4. 1756冗余_AB冗余模块1756-RM
  5. IntelliJ IDEA开发环境应用
  6. vue lang_推荐一个基于Vue 的 H5 快速开发模板
  7. 在java 中调c_在Java中调用C
  8. VS2013默认打开HTML文件没有设计视图的解决办法
  9. [Bzoj2152]聪聪可可
  10. 重理工c语言实验指导书答案,C语言实验指导书自测练习参考答案
  11. 网关监控软件设计与实现
  12. 机器学习_高偏差(High bias)与高方差(High vars)
  13. —— GPS测量原理及应用复习 ——
  14. css动画怎么暂停,纯CSS代码实现动画的暂停与播放
  15. Swift 基础 高阶函数 forEach filter map compactMap compactMapValues flatMap reduce sort sorted shuffled ...
  16. 关于 CVE-2021-44228 Log4j2 漏洞的相关应对汇总说明(包含中英文客户公告)
  17. JS原生编写飞机大战小蜜蜂游戏
  18. 有的人呀,他真的是带不动。。。
  19. DuerOS的零编程技能实现
  20. windows bat

热门文章

  1. 儿童玩具APP开发应用
  2. iOS 14 的新功能及评价
  3. React全Hook项目实战在线聊天室历程(三):加个音乐直播?
  4. javascript获取屏幕的可用宽度和高度
  5. Linux下查看网关地址和DNS地址
  6. 【池化技术】池化技术基础和原理
  7. Linux下轻松理解防火墙的工作原理及相关设置(三)firewalld服务、包括Direct Rules 和Rich Rules (地址伪装和转发)
  8. A段架构师的”相之道”:以战术引导战略思维
  9. 游戏陪玩源码的那些关键环节,利用了什么技术手段?
  10. Echarts图表清空