java根据以逗号分割的文件名字符串下载文件并以zip格式输出

import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.net.URLEncoder;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public void downloadFilesToZip(HttpServletResponse response) {
        String[] fileNames = new String[]{"1.jpg", "2.png", "3.xlsx"};
        // 创建一个字节数组输出流
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            // 创建一个ZipOutputStream对象,将其关联到字节数组输出流
            ZipOutputStream zipOut = new ZipOutputStream(baos);
            // 遍历文件列表,逐个将文件压缩到zip文件中
            for (String fileName : fileNames) {
                if (StrUtil.isNotEmpty(fileName)) {
                    String[] split = fileName.split("\\.");
                    // 创建一个输入流来读取文件内容
                    InputStream fis = xxx;
                    // 创建一个ZipEntry对象,表示压缩文件的条目
                    ZipEntry zipEntry = new ZipEntry("附件." + split[1]);
                    // 将该条目添加到ZipOutputStream中
                    zipOut.putNextEntry(zipEntry);
                    // 从输入流读取文件内容,并写入ZipOutputStream中
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = fis.read(buffer)) > 0) {
                        zipOut.write(buffer, 0, len);
                    }
                    // 关闭输入流
                    fis.close();
                    // 关闭当前条目
                    zipOut.closeEntry();
                }
            }
            // 关闭ZipOutputStream
            zipOut.close();
            // 将压缩后的字节数组转换为可下载的文件
            byte[] zipBytes = baos.toByteArray();
            String zipFileName = "附件.zip";
            //解决输出乱码问题
            String zipFileNameNew = URLEncoder.encode(zipFileName, "UTF-8");
            // 设置响应的内容类型为zip文件
            response.setHeader("Content-disposition", "attachment;filename=\"" + zipFileNameNew + "\"");
            response.setContentType("application/zip; charset=UTF-8");
            // 将压缩包的字节数组写入到响应输出流
            response.getOutputStream().write(zipBytes);
            response.flushBuffer();
        } catch (Exception e) {
            e.printStackTrace();
        }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值