[Java Web]服务器获取远程文件并Zip打包给客户端下载

Java Zip文件打包与下载
本文介绍了一种在Java中实现多个文件打包成Zip并提供客户端下载的方法。具体步骤包括:通过File对象指定待打包文件,调用自定义doZIP方法进行Zip打包,最后设置HTTP响应头以触发浏览器下载。

一、应用场景
客服端请求下载,服务器B从服务器A中获得远程文件Url,服务器B通过服务器A获取的Url拿到文件后,在服务器B中处理,进行Zip打包,并在客户端中响应给客户端,完成Zip文件下载。

二、思路代码

        File file1 = new File(“这里使用File构造方法实例化File对象”);

        File file2 = new File(“这里使用File构造方法实例化File对象”);

        File [] tarFile = {file1,file2};//将多个文件放入File数组

        String zipName = doZIP("zipname",tarFile);//这里,我写了一个将多个文件打包为zip的方法doZip(),doZip()返回生成的zip路径

        response.setCharacterEncoding("utf-8");//设置编码统一
        response.setContentType("multipart/form-data");//设置multipart
        //响应头部
        response.setHeader("Content-disposition", "attachment;filename=order_" + “设置一个文件名” + ".zip");
        InputStream inputStreamzip = new FileInputStream(new File(zipName));//通过zip路径实例化inputStream流

        OutputStream os = response.getOutputStream();
        byte[] b = new byte[2048];
        int length;
        while ((length = inputStreamzip.read(b)) > 0) {
            os.write(b, 0, length);
        }
        os.close();
        inputStreamzip.close();

接下来就是doZip()方法:

    /*文件打包zip*/
    public String doZIP(String zipname, File [] files) throws Exception{
    //doZIP(命名的打包文件名,传递过来的File数组)
        byte[] buffer = new byte[1024];

        String strZipName = zipname;

        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(strZipName));

        for(int i=0;i<files.length;i++) {

            FileInputStream fis = new FileInputStream(files[i]);

            out.putNextEntry(new ZipEntry(files[i].getName()));

            int len;

            //读入需要下载的文件的内容,打包到zip文件

            while((len = fis.read(buffer))>0) {

                out.write(buffer,0,len);

            }

            out.closeEntry();

            fis.close();

        }

        out.close();

        return strZipName;
    }

这里注意一下,打包为zip我用了两个包

import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

整体,其实还是,使用zip包,对File数组进行处理,将数组中的所用文件循环处理,一起打包为zip。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值