java接收form表单提交的图片以及文档信息
实现思路:
存入数据库:传图片时,为了防止图片名重复先使用UUID对图片名进行重命名,然后再把图片放在指定路径下,最后把图片的路径存放在数据库中。
取出图片:从数据库中取出相应的图片路径,回显到前端页面
首先需要引入两个jar包:
- commons-fileUpload.jar
- commons-io.jar
文件上传分析:
1.普通表单的提交默认为enctype="application/x-www-form-urlencoded";但是当表单中存在文件类型时,需要设置enctype="multipart/form-data",它不对字符进行编码,用于发送二进制的文件(即所有文件类型,如视频、图片、音乐、文档都可以用此类型entype)。
2.表单请求方式必须为post。
3.接收时不能再用request.getParameter()进行接收,而是request.getInputStream()解析二进制流,得到ServletInputStream对象。
表单提交页面:
<form action="AddGoodsServlet" method="post" enctype="multipart/form-data" name="goodsForm" id="form"> <p>商品名:<input type="text" name="pName" id="pName"/></p> <p>商品种类: <select name="pType" id="pType"> <option value="数码产品">数码产品</option> <option value="玩具手办">玩具手办</option> <option value="潮流服装">潮流服装</option> <option value="闲置电器">闲置电器</option> <option value="健身器材">健身器材</option> <option value="万卷图书">万卷图书</option> </select> </p> <p>商品图片: <input type="file" name="pPhoto"/></p> <p>商品价格:<input type="text" name="pPrice" id="pPrice"/></p> <p>备注:<input type="text" name="Text" id="Text"/></p> <p><input type="button" value="确认上架" /></p> </form>
Servlet接收页面:
1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 DiskFileItemFactory factory=new DiskFileItemFactory(); 3 ServletFileUpload upload=new ServletFileUpload(factory); 4 HttpSession session = request.getSession(); 5 String username = (String) session.getAttribute("username");//获取到登录时存入session里的用户对象 6 upload.setHeaderEncoding("UTF-8"); 7 //浏览器使用何种方式进行编码传递数据,那么就应该指示服务器以何种方式解析数据,从而获得原来的数据 8 response.setContentType("text/html;charset=UTF-8"); 9 //文件名中文乱码处理也可以如此写 10 // upload.setHeaderEncoding("utf-8"); 11 //设置缓冲区大小与临时文件目录 12 factory.setSizeThreshold(1024*1024*10); 13 File uploadTemp=new File("D:\\picture"); 14 uploadTemp.mkdirs(); 15 factory.setRepository(uploadTemp); 16 17 //设置单个文件大小限制 18 upload.setFileSizeMax(1024*1024*10); 19 //设置所有文件总和大小限制 20 upload.setSizeMax(1024*1024*30); 21 GoodsDao dao=new GoodsDaoImpl(); 22 Goods g=new Goods(); 23 try { 24 List<FileItem> filelist=upload.parseRequest(request); 25 System.out.println(filelist); 26 for (FileItem fileItem:filelist){ 27 g.setUsername(username); 28 if (!fileItem.isFormField()&&fileItem.getName()!=null&&!"".equals(fileItem.getName())){ 29 //接收文件内容 30 String filName=fileItem.getName(); 31 System.out.println(filName); 32 //利用UUID生成伪随机字符串 33 String uuid= UUID.randomUUID().toString(); 34 //获取文件后缀名 35 String suffix=filName.substring(filName.lastIndexOf(".")); 36 System.out.println(suffix); 37 String newFileName = uuid + suffix; 38 //System.out.println("新文件名:" + newFileName); 39 // 定义文件写入位置,调用FileItem的write()方法,写入文件 40 String uploadPath="D:/HLBBS/picture"; 41 File file=new File(uploadPath); 42 System.out.println("uploadPath:"+uploadPath); 43 file.mkdirs(); 44 //写入文件到磁盘 45 fileItem.write(new File(uploadPath,uuid+suffix)); 46 String pPhoto=uuid+suffix; 47 g.setpPhoto(pPhoto); 48 // System.out.println("pPhoto:"+pPhoto); 49 }else { 50 //接收非文件内容 51 String name = fileItem.getFieldName(); 52 String value = fileItem.getString(); 53 if("pName".equals(name)) { 54 String pName=value; 55 pName = new String(pName.getBytes("iso-8859-1"),"UTF-8"); 56 //System.out.println("商品名:"+pName); 57 g.setpName(pName); 58 }else if("pType".equals(name)) { 59 String pType=value; 60 pType = new String(pType.getBytes("iso-8859-1"),"UTF-8"); 61 //System.out.println("pType:"+pType); 62 g.setpType(pType); 63 }else if("pPrice".equals(name)) { 64 String pPrice=value; 65 pPrice = new String(pPrice.getBytes("iso-8859-1"),"UTF-8"); 66 //System.out.println("pPrice:"+pPrice); 67 g.setpPrice(pPrice); 68 }else if("Text".equals(name)) { 69 String Text=value; 70 Text = new String(Text.getBytes("iso-8859-1"),"UTF-8"); 71 //System.out.println("Text:"+Text); 72 g.setText(Text); 73 } 74 } 75 } 76 77 } catch (Exception e) { 78 e.printStackTrace(); 79 } 80 //添加到数据库 81 dao.insert(g); 82 ArrayList<Goods> list=dao.selectAllGoods(); 83 request.setAttribute("list", list); 84 request.getRequestDispatcher("#").forward(request, response); 85 }
这样就可以完成了图片在数据库中的存取操作了。
如果大家想了解更多有关知识,可以看看这篇博客:
java web文件上传——FileUpload
浙公网安备 33010602011771号