Servlet多文件打包下載

mdk3 9年前發布 | 1K 次閱讀 Java

Servlet代碼

    package project;

import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import java.util.Date;  

import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import java.util.zip.*;  
/** 
 * Servlet實現多文件打包下載 
 * @author Frank 
 * 
 */  
public class Download extends HttpServlet {  

    /** 
     *  
     */  
    private static final long serialVersionUID = -1379339763454618902L;  

    public Download() {  
        super();  
    }  

    /** 
     * doPost提交方式 
     */  
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        this.doGet(request, response);  
    }  

    /** 
     * doGet提交方式 
     */  
    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {  
        response.setContentType("APPLICATION/OCTET-STREAM");  
        response.setHeader("Content-Disposition", "attachment; filename="+ this.getZipFilename());  
        System.out.println("in BatchDownload................");  
        ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());  
        File[] files = new File[3];  
        /*這里可以根據前臺進行賦值,我這樣做事為了快速做測試而已 */  
        files[0] = new File("F:/1111.png");  
        files[1] = new File("F:/11.png");  
        files[2] = new File("D:/testduo");  
        for(File f:files){  
            zipFile(f, "", zos);  
        }  
        zos.flush();  
        zos.close();  
    }  

    /** 
     * 使用遞歸進行文件夾,文件的掃描 
     */  
    private void zipFile(File subs, String baseName, ZipOutputStream zos)throws IOException {  
        if(subs.exists()){  
            if(subs.isFile()){  
                zos.putNextEntry(new ZipEntry(baseName + subs.getName()));  
                FileInputStream fis = new FileInputStream(subs);  
                byte[] buffer = new byte[1024];  
                int r = 0;  
                while ((r = fis.read(buffer)) != -1) {  
                    zos.write(buffer, 0, r);  
                }  
                fis.close();  
            }else{  
                //如果是目錄。遞歸查找里面的文件  
                String dirName = baseName + subs.getName() + "/";  
                zos.putNextEntry(new ZipEntry(dirName));  
                File[] sub = subs.listFiles();  
                for (File f : sub) {  
                    zipFile(f, dirName, zos);  
                }  
            }  
        }  

    }  

    /** 
     * 獲取zip文件名 
     * @return 
     */  
    private String getZipFilename() {  
        Date date = new Date();  
        String s = date.getTime() + ".zip";  
        return s;  
    }  

}  </pre> 


Web.xml配置

    <?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
<web-app>
<servlet>
<servlet-name>Down</servlet-name>
<servlet-class>project.Download</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Down</servlet-name>
<url-pattern>/scripts/Down</url-pattern>
</servlet-mapping>

   <welcome-file-list>  
        <welcome-file>/login.jsp</welcome-file>  
   </welcome-file-list>  
 </web-app>  </pre> 


 本文由用戶 mdk3 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!