java下载多个文件,打包成zip格式

java下载多个文件,打包成zip格式

我们在使用java下载时候,通常是通过路径获取二进制文件,再通过HttpServletResponse发送到前台,最近开发中有一个需求是将多张图片打包成zip格式进行下载。代码如下:

ZipOutputStream zos = null;
BufferedInputStream br = null;
//下载方法
try {
    //文件的名称
    String downloadFilename = registrationLoginResultVo.getBusinessName()+".zip";
    response.reset();
    //设置格式
    response.setContentType("application/x-msdownload");
    response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(downloadFilename, "UTF-8"));
    //ZipOutputStream来对文件压缩操作
    zos = new ZipOutputStream(response.getOutputStream());
    //循环下载文件,并将之放到ZipOutputStream中
    for (int i = 0; i < filePath.length; i++) {
        //filePath是下载路径集合
        //fileName是文件名称
        zos.putNextEntry(new ZipEntry(fileName[i]+".jpg"));
        new BufferedInputStream(new FileInputStream(filePath[i]));
        byte[] buffer = new byte[1024];
        int r = 0;
        while ((r = br.read(buffer)) != -1) {
            zos.write(buffer, 0, r);
        }
    }
    zos.flush();
} catch (IOException e) {
    log.error("企业初审导出图片压缩包错误", e);
}finally {
    try {
        zos.close();
        br.close();
    } catch (IOException e) {
        log.error("企业初审导出图片关闭流异常", e);
    }
}

前端使用xhr进行下载


window.img = function img() {
    var supplierName = $("#businessName").val();
    layer.load(2);
    //下载图片格式
    var fileName = supplierName+".zip";
    var url = config.base_server + "路径?uuid="+uuid
    var xhr = new XMLHttpRequest();
    xhr.open("get", url, true);
    xhr.responseType = "blob";
    xhr.onload = function () {
        if (this.status == "200") {
            var content = this.response;
            var blob = new Blob([xhr.response]);
            //for IE
            if (window.navigator && window.navigator.msSaveOrOpenBlob) {
                window.navigator.msSaveOrOpenBlob(blob, fileName);
            } else {
                var aElem = document.createElement('a');
                aElem.download = fileName;
                aElem.href = window.URL.createObjectURL(blob);
                aElem.onload = function (e) {
                    window.URL.revokeObjectURL(aElem.href);
                };
                document.body.appendChild(aElem);
                aElem.click();
                document.body.removeChild(aElem);
            }
            layer.closeAll();
        }
    };
    xhr.setRequestHeader("Authorization", config.getToken());
    xhr.send();
};

以上就是全部内容,希望大家关注我的订阅号,我会在订阅号内为大家提供Java,小程序,Vue等知识的学习资料,为初学者解疑答惑,不定期更新面试题,谢谢大家支持。公众号名称:程序猿Time
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值