java spring boot 批量下载文件

文件在数据库中以二进制文件流形式存储,单个导出

@GetMapping("/exportFile")
    public void download(@RequestParam String id, HttpServletResponse response) throws IOException {

        // todo 判断文件是否存在
        Files files = filesService.getById(id);
        if (files == null) {
            response.getWriter().write("文件不存在!");
            return;
        }
        // 获取文件名和文件格式
        String fileName = files.getFileName() + files.getFileSuffix();
        // 设置文件名称和文件格式
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));

        byte[] document = files.getFile();
        try (InputStream inputStream = new ByteArrayInputStream(document);
             ServletOutputStream outputStream = response.getOutputStream()) {
            int len = 0;
            byte[] buf = new byte[1024];
            while ((len = inputStream.read(buf, 0, 1024)) != -1) {
                outputStream.write(buf, 0, len);
            }
            outputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

 

批量导出

public void batchExport(String ids, HttpServletResponse response) throws IOException {
        List<String> idList = StringUtils.str2List(ids, ",", true, true);

        List<String> isExists = new ArrayList<>();
        // 根据所传id判断文件是否存在,只下载数据库中存在的文件
        for (String value : idList) {
            if ((filesService.count(Long.valueOf(value))) == 1) {
                isExists.add(value);
            }
        }

        // 若根据所传id均找不到文件,返回提示信息
        if (isExists.size() == 0) {
            response.getWriter().write("文件不存在");
            return;
        }

        // 设置导出压缩包的名称 以P开头 中间为下载时间 后缀为zip
        String ZipFileName = "P" + Utils.dataForMart("2") + ".zip";
        response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(ZipFileName, "utf-8"));
        response.setContentType("application/zip;charset=UTF-8");
        ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
        for (String s : idList) {

            Files files = filesService.getById(s);
            String fileName = files.getFileName() + files.getFileSuffix();
            ZipEntry zipEntry = new ZipEntry(fileName);
            zipOut.putNextEntry(zipEntry);
            byte[] bytes = files.getFileBinary();
            zipOut.write(bytes, 0, bytes.length);

        }
        zipOut.close();

    }

 

posted @ 2022-07-29 17:29  铁锅炖猫  阅读(2034)  评论(2)    收藏  举报