当前位置:编程学习 > JAVA >>

java一款支持批量上传的代码示例

效果图如下:
 
该工程包含五个源文件:BackGroundService.java、BeanControler.java、EventListenerImpl.java、FileUploadListener.java和FileUploadStatus.java;以及2个jsp页面。源码已提供免费下载,下载后直接部署到tomcat中运行即可。
BackGroundService.java:
[java]  
package liuzuochen.sample.upload;  
  
/** 
 * <p>Title: 后台服务</p> 
 * 
 * <p>Description: 为客户端提供上传及文件传输状态查询服务</p> 
 * 
 */  
  
import java.io.File;  
import java.io.IOException;  
import java.util.List;  
  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import org.apache.commons.fileupload.FileItem;  
import org.apache.commons.fileupload.FileUploadException;  
import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
import org.apache.commons.fileupload.servlet.*;  
  
  
public class BackGroundService extends javax.servlet.http.HttpServlet implements  
        javax.servlet.Servlet {  
  
    public static final String UPLOAD_DIR = "/upload";  
    public static final String DEFAULT_UPLOAD_FAILURE_URL = "index2.jsp";  
  
    public BackGroundService() {  
        super();  
    }  
  
  
    protected void doGet(HttpServletRequest request,  
                         HttpServletResponse response) throws ServletException,  
            IOException {  
        doPost(request, response);  
    }  
  
    /** 
     * 从文件路径中取出文件名 
     */  
    private String takeOutFileName(String filePath) {  
        int pos = filePath.lastIndexOf(File.separator);  
        if (pos > 0) {  
            return filePath.substring(pos + 1);  
        } else {  
            return filePath;  
        }  
    }  
  
    /** 
     * 从request中取出FileUploadStatus Bean 
     */  
    public static FileUploadStatus getStatusBean(  
            HttpServletRequest request) {  
        BeanControler beanCtrl = BeanControler.getInstance();  
        return beanCtrl.getUploadStatus(request.getRemoteAddr());  
    }  
  
    /** 
     * 把FileUploadStatus Bean保存到类控制器BeanControler 
     */  
    public static void saveStatusBean(  
            HttpServletRequest request,  
            FileUploadStatus statusBean) {  
        statusBean.setUploadAddr(request.getRemoteAddr());  
        BeanControler beanCtrl = BeanControler.getInstance();  
        beanCtrl.setUploadStatus(statusBean);  
    }  
  
    /** 
     * 删除已经上传的文件 
     */  
    private void deleteUploadedFile(HttpServletRequest request) {  
        FileUploadStatus satusBean = getStatusBean(request);  
        for (int i = 0; i < satusBean.getUploadFileUrlList().size(); i++) {  
            File uploadedFile = new File(request.getRealPath(UPLOAD_DIR) +  
                                         File.separator +  
                                         satusBean.getUploadFileUrlList().  
                                         get(i));  
            uploadedFile.delete();  
        }  
        satusBean.getUploadFileUrlList().clear();  
        satusBean.setStatus("删除已上传的文件");  
        saveStatusBean(request, satusBean);  
    }  
  
    /** 
     * 上传过程中出错处理 
     */  
    private void uploadExceptionHandle(  
            HttpServletRequest request,  
            String errMsg) throws ServletException, IOException {  
        //首先删除已经上传的文件  
        deleteUploadedFile(request);  
        FileUploadStatus satusBean = getStatusBean(request);  
        satusBean.setStatus(errMsg);  
        saveStatusBean(request, satusBean);  
    }  
  
    /** 
     * 初始化文件上传状态Bean 
     */  
    private FileUploadStatus initStatusBean(HttpServletRequest  
            request) {  
        FileUploadStatus satusBean = new FileUploadStatus();  
        satusBean.setStatus("正在准备处理");  
        satusBean.setUploadTotalSize(request.getContentLength());  
        satusBean.setProcessStartTime(System.currentTimeMillis());  
        satusBean.setBaseDir(request.getContextPath() + UPLOAD_DIR);  
        return satusBean;  
    }  
  
    /** 
     *
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,