首先来看如下效果图片:
表单代码:
(推荐视频教程: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实现图片和文本同时提交到表单的详细内容。