文件上传和字段匹配
jsp页面中
<form action="${pageContext.request.contextPath}/servlet/ManagerServlet?operation=addBook" method="post" enctype="multipart/form-data">
FileItem的用法
http://blog.csdn.net/smallhorn/article/details/7864658
1.boolean isFormField()。isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段。如果是普通文本表单字段,返回一个true否则返回一个false。因此可以用该方法判断是否是普通表单域还是文件上传表单域。
2.String getName()。getName方法用来获得文件上传字段中的文件名。
3.String getFieldName()。getFieldName方法用来返回表单标签的name属性的值。
5.String getString()。getString()方法将FileItem对象中保存的数据流内容以一个字符串返回。它有两个重载形式。public java.lang.String getString()和public java.lang.String getString(java.lang.String
servlet中
1 //添加书籍到数据库中 2 private void addBook(HttpServletRequest request, 3 HttpServletResponse response) throws ServletException, IOException { 4 String resultPath = ""; 5 String storePath = getServletContext().getRealPath("/files"); 6 try { 7 Book book = new Book(); 8 9 DiskFileItemFactory factory = new DiskFileItemFactory(); 10 ServletFileUpload upload = new ServletFileUpload(factory); 11 //解析请求 12 List<FileItem> items = upload.parseRequest(request); 13 for(FileItem item:items){ 14 if(item.isFormField()){ 15 //封装数据到JavaBean中 16 String fieldName = item.getFieldName();//字段名,即javabean的属性名,除了图片 17 String fieldValue = item.getString(request.getCharacterEncoding()); 18 BeanUtils.setProperty(book, fieldName, fieldValue);//除了图片路径,其他数据都有了 19 }else{ 20 //处理文件上传 21 InputStream in = item.getInputStream(); 22 String fileName = item.getName();// c:\dsf\a.jpg 23 fileName = UUID.randomUUID()+fileName.substring(fileName.lastIndexOf("\\")+1);//a.jpg 24 //设置存取的图片文件名 25 book.setImage(fileName); 26 OutputStream out = new FileOutputStream(storePath+"\\"+fileName); 27 byte b[] = new byte[1024]; 28 int len = -1; 29 while((len=in.read(b))!=-1){ 30 out.write(b, 0, len); 31 } 32 out.close(); 33 in.close(); 34 item.delete();//删除临时文件 35 } 36 } 37 s.addBook(book); 38 //查询分类 39 List<Category> cs = s.findAllCategory(); 40 request.setAttribute("cs", cs); 41 resultPath = "/manager/addBook.jsp"; 42 request.setAttribute("message", "<script type='text/javascript'>alert('添加成功')</script>"); 43 } catch (Exception e) { 44 e.printStackTrace(); 45 resultPath = "/message.jsp"; 46 request.setAttribute("message", "服务器忙"); 47 } 48 request.getRequestDispatcher(resultPath).forward(request, response); 49 }