批量导出字段blob为zip文件

发布时间:2026/6/26 23:15:13

批量导出字段blob为zip文件 一导出数据库字段是blob的base64编码后的图片二代码public ResponseEntitybyte[] exportQrCodes(RequestBody(required false)InvoiceSummary invoiceSummary) { try { // 生成ZIP数据 byte[] zipData exportQrCodesToZip(invoiceSummary); // 生成文件名带时间戳 String timestamp new SimpleDateFormat(yyyyMMdd_HHmmss).format(new Date()); String fileName qrcodes_ timestamp .zip; String encodedFileName URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()) .replaceAll(\\, %20); // 返回文件流浏览器会自动下载到默认下载文件夹 return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, attachment; filename*UTF-8 encodedFileName) .contentType(MediaType.APPLICATION_OCTET_STREAM) .body(zipData); } catch (Exception e) { return ResponseEntity.internalServerError().build(); } } /** * 批量导出二维码为ZIP包 */ public byte[] exportQrCodesToZip(InvoiceSummary invoiceSummary) { // 查询所有有二维码的数据 startPage(); ListInvoiceSummary list invoiceSummaryService.selectInvoiceSummaryList(invoiceSummary); if (CollectionUtils.isEmpty(list)) { throw new RuntimeException(没有找到二维码数据); } System.err.println(开始导出共{}张二维码 list.size()); ByteArrayOutputStream baos new ByteArrayOutputStream(); try (ZipOutputStream zos new ZipOutputStream(baos)) { int successCount 0; for (InvoiceSummary entity : list) { String base64 entity.getElectronicTicketQrCode(); if (base64 null || base64.isEmpty()) { continue; } try { // Base64解码 byte[] imageBytes Base64.getDecoder().decode(base64); // 添加到ZIP文件 String fileName qrcode_ entity.getId() .png; ZipEntry entry new ZipEntry(fileName); zos.putNextEntry(entry); zos.write(imageBytes); zos.closeEntry(); successCount; if (successCount % 100 0) { System.err.println(已打包 {} 张successCount); } } catch (Exception e) { System.err.println(打包失败 ID: {} entity.getId()); } } System.err.println(打包完成成功{}张失败{}张 list.size()); } catch (Exception e) { System.err.println(ZIP打包失败e); throw new RuntimeException(导出失败, e); } return baos.toByteArray(); }三效果

相关新闻