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) 编辑 收藏 举报