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(); }
浙公网安备 33010602011771号