java实现图片和文本同时提交到表单

互联网 20-2-2

首先来看如下效果图片:

(推荐视频教程:java视频教程)

<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" οnchange="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>

提交表单是采用二进制方式提交,所以一般用来上传图片操作,当在这个表单下同时上传文本,就会报错。但是业务需要上传商品是文本和图片同时上传的,所以这里要用到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入门教程

以上就是java实现图片和文本同时提交到表单的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 表单
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:java如何调用js方法

相关资讯