【记录】文件批量下载

实现

@Override
    public void getBatch(HttpServletRequest request, HttpServletResponse response, PdfBatchDTO pdfDTO)
            throws Exception {
        //存放文件路径
        List<String> filenames = new ArrayList<>();
        filenames.add("D:\b.pdf");
        filenames.add("D:\文档.docx");
       
        if (!ObjectUtils.isEmpty(filenames)) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            String fileAdd = sdf.format(new Date());
            String inputPath = realPath + File.separator + fileAdd + File.separator;

            //生成压缩包
            String fileName = "下载.zip";
            String rarPath = inputPath + File.separator + File.separator + fileName;
            File file = new File(rarPath);
            if (!file.exists()) {
                file.createNewFile();
            }
            FileOutputStream fOutputStream = new FileOutputStream(file);
            ZipOutputStream zoutput = new ZipOutputStream(fOutputStream);

            for (String filename : filenames) {
                fileToZip(filename, zoutput);
            }

            zoutput.close();

            //拼接下载默认名称并转为ISO-8859-1格式
            String fileName2 = new String(("我的压缩文件.zip").getBytes(), StandardCharsets.ISO_8859_1);
            response.setHeader("Content-Disposition", "attchment;filename=" + fileName2);

            //该流不可以手动关闭,手动关闭下载会出问题,下载完成后会自动关闭
            ServletOutputStream outputStream = response.getOutputStream();
            FileInputStream inputStream = new FileInputStream(rarPath);
            // 如果是SpringBoot框架,在这个路径
            // org.apache.tomcat.util.http.fileupload.IOUtils产品
            // 否则需要自主引入apache的 commons-io依赖
            // copy方法为文件复制,在这里直接实现了下载效果
            IOUtils.copy(inputStream, outputStream);

            // 关闭输入流
            inputStream.close();

            //下载完成之后,删除所有文件
            deleteDir(inputPath);
        }

    }

工具类

 //删除文件加下所有内容
    public static void deleteDir(String path) {
        File file = new File(path);
        if (!file.exists()) {//判断是否待删除目录是否存在
            System.err.println("The dir are not exists!");
            return;
        }

        String[] content = file.list();//取得当前目录下所有文件和文件夹
        for (String name : content) {
            File temp = new File(path, name);
            if (temp.isDirectory()) {//判断是否是目录
                deleteDir(temp.getAbsolutePath());//递归调用,删除目录里的内容
                temp.delete();//删除空目录
            } else {
                if (!temp.delete()) {//直接删除文件
                    System.err.println("Failed to delete " + name);
                }
            }
        }
        return;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值