JavaWeb文件上传

         好久没碰Java了,今天要给项目添加一个文件上传功能,在网上搜了一下,用的最广泛的就是Apache的Commons FileUpload。大致看了一下官方提供的手册,用起来很简单。

  Commons FileUpload需要Commons IO包

    代码贴出来

 1 import java.io.File;
 2 import java.io.IOException;
 3 import java.util.List;
 4 
 5 import javax.servlet.ServletContext;
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 import org.apache.commons.fileupload.FileItem;
12 import org.apache.commons.fileupload.FileItemFactory;
13 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
14 import org.apache.commons.fileupload.servlet.ServletFileUpload;
15 
16 public class UploadServlet extends HttpServlet {
17 
18     private static final long serialVersionUID = 8982109274833629008L;
19     private static String uploadDir = "/upload";// 上传文件的位置
20 
21     @SuppressWarnings("unchecked")
22     @Override
23     protected void service(HttpServletRequest request,
24             HttpServletResponse response) throws ServletException, IOException {
25         boolean isMultipart = ServletFileUpload.isMultipartContent(request);// 是否是上传文件的action
26         if (isMultipart) {
27             // 为解析器提供解析式的缺省配置
28             FileItemFactory factory = new DiskFileItemFactory();
29             ServletContext context = this.getServletContext();
30             String path = context.getRealPath(uploadDir);// 获取上传文件的物理目录
31             // 创建一个解析器
32             ServletFileUpload upload = new ServletFileUpload(factory);
33             try {
34                 List<FileItem> items = upload.parseRequest(request);
35                 for (FileItem item : items) {
36                     if (item.isFormField()) {// 如果是一个普通的表单域
37                         String name = item.getString();
38                         System.out.println(name);
39                     } else {// 如果 type='file'
40                         // 上传文件名
41                         String fileName = item.getName();
42                         path += File.separator + fileName;
43                         System.out.println("上传文件名:" + path);
44                         File uploadFile = new File(path);
45                         item.write(uploadFile);//写如文件
46                         System.out.println("上传成功");
47                     }
48                 }
49             } catch (Exception e) {
50             }
51         }
52     }
53 
54 }

Commons FileUpload思想就是把  上传文件的表单(Form)封装成一个List<FileItem>,表单中每个表单项封装成FileItem。我们可以根据自己的需求处理一个个表单域。

根据item.isFormField()来判断正常表单域和type='file'单位表单域。

 

posted on 2013-06-05 19:35  Arts&Crafts  阅读(532)  评论(0编辑  收藏  举报

导航