日期:2014-05-20 浏览次数:21040 次
package com.my;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadOther extends HttpServlet {
    @SuppressWarnings("unchecked")
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // DiskFileItemFactory实例为解析对象提供
        // 解析时的一些缺省配置
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 创建解析对象
        ServletFileUpload sfu = new ServletFileUpload(factory);
        sfu.setSizeMax(1024 * 500);
        // 使用解析对象,分析InputStream
        try {
            // 解析对象,将解析的结果封装成
            // FileItem对象的一个集合。每一个
            // FileItem对象与一个表单域对应。
            List<FileItem> items = sfu.parseRequest(request);
            for (int i = 0; i < items.size(); i++) {
                FileItem item = items.get(i);
                if (item.isFormField()) {
                    // 如果是一个普通的表单域
                    // getFieldName:返回表单域的名称
                    String name = item.getFieldName();
                    // getString:返回表单域的值
                    String value = item.getString();
                    System.out.println(name + " " + value);
                } else {
                    // 如果是上传文件表单域,
                    // 将该文件存放到服务器上面的某个文件夹下面
                    // 可以使用Servlet上下文提供的
                    // getRealPath()获得一个与实际部署相关的路径。
                    // 获得Servlet上下文对象
                    ServletContext sctx = getServletContext();
                    // 获得upload的实际的物理路径
                    String path = sctx.getRealPath("upload");// 这个目录并不存在,需要建
                    new File(path).mkdir();
                    System.out.println("path:" + path);
                    // 获得文件名
                    String fileName = item.getName();
                    // 获得文件的类型
                    String type = item.getContentType();
                    System.out.println("type:" + type);
                    // 在某些操作系统上,运行时,getName方法
                    // 会返回路径+文件名
                    fileName = fileName
                            .substring(fileName.lastIndexOf("\\") + 1);
                    System.out.println("fileName:" + fileName);
                    
                    File file = new File(path + "\\" + fileName);
                    //file.mkdir();
                    item.write(file);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            request.setAttribute("upload_err", "上传的文件不能超过50k");
            request.getRequestDispatcher("form.jsp").forward(request, response);
        }
    }
}