码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA实现边下载边压缩

时间:2017-12-16 17:24:15      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:src   while   下载   dir   xxx   ted   需求   new   https   

需求:从服务器下载图片。
因为项目前期设置的问题,导致各个项目的图片是分开存放的。客户要求根据项目下载,实现项目下分地方,然后地方目录下是图片

技术分享图片

@ResponseBody
public void downloadUrl(HttpServletResponse response, HttpServletRequest request){
    String sourceFilePath=properties.getString("sourceFilePath");//要下载的文件路径
    eavlProName = xxx;//项目名
    String downloadName = "xxx.zip"; //下载文件名
    String agent = request.getHeader("USER-AGENT");   //浏览器内核信息
    try {
        if (agent.contains("MSIE")||agent.contains("Trident")) {// IE
        downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
    } else {
        downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    zip(sourceFilePath, eavlProName, response, downloadName);

    response.getOutputStream().close(); //这个应该没什么用
}

private void zip(String souceFileName, String eavlProName,  HttpServletResponse response, String downloadName) {  
    File file = new File(souceFileName);  
    try {  
        zip(file, eavlProName, response, downloadName);  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}  

private void zip(File souceFile, String eavlProName, HttpServletResponse response, String downloadName) throws IOException {  
    ZipOutputStream out = null;
    //设置压缩流。
    response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");
    try {
        out = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
        out.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法 
    } catch (Exception e) {
        e.printStackTrace();
    }
    out.setEncoding("gbk");
    zip(souceFile, out, eavlProName, eavlProName,null);
    out.closeEntry();
    out.close(); 
}  

private void zip(File souceFile, ZipOutputStream out, String base, String eavlProName, Integer i)  
        throws IOException {  
    if (souceFile.isDirectory()) {  
        File[] files = souceFile.listFiles(); 
        if (files.length != 0) {
            if (i == null || i != 1) { //对于地方目录先不创建,当地方目录下存在项目的截图时,才创建
                out.putNextEntry(new ZipEntry(base + "/"));  
                base = base.length() == 0 ? "" : base + "/";  
            }
            if (i == null) {
                i = 0;
            }
            i++;
            for (File file : files) { 
                if (i == null || i != 2) { //2地方下面的项目名.这种不创建目录
                    zip(file, out, base + file.getName(), eavlProName, i);    
                }else {
                    String picPathname =file.getName();
                    if (picPathname.equals(eavlProName)) { //取对应项目下的文件
                        zip(file, out, base, eavlProName, i); 
                    }
                }
            }
        }
    } else {  
        if (base.length() > 0) {  
            out.putNextEntry(new ZipEntry(base));  
        } else {  
            out.putNextEntry(new ZipEntry(souceFile.getName()));  
        }  
        FileInputStream in = new FileInputStream(souceFile);  
        int b;  
        byte[] by = new byte[1024];  
        while ((b = in.read(by)) != -1) {  
            out.write(by, 0, b);  
        }  
        in.close();  
    }  
} 

 

 

参考:http://www.jianshu.com/p/7cabe09ce563

JAVA实现边下载边压缩

标签:src   while   下载   dir   xxx   ted   需求   new   https   

原文地址:http://www.cnblogs.com/baidualiwangyi/p/8046707.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!