我公司想做网站,建设网站物业经理上岗证陈俊华,西安网站制作开发公司哪家好,品牌建设与营销的关系前言#xff1a;之前实现的需求由于导出时需要的时间过于长#xff0c;需要优化采用多线程的方式进行导出 更改之后的代码#xff1a; 首先创建excel的临时文件#xff0c;并写入。然后创建线程池#xff0c;调用zipArchiveOutputStream来写入图片和excel PostMapping(之前实现的需求由于导出时需要的时间过于长需要优化采用多线程的方式进行导出 更改之后的代码 首先创建excel的临时文件并写入。然后创建线程池调用zipArchiveOutputStream来写入图片和excel PostMapping(/export3)public void exportZip(HttpServletResponse response,RequestParam(value startTime,required false)String startTime,RequestParam(value endTime,required false)String endTime,RequestParam(value deviceName,required false)String deviceName) throws IOException {ListCutterImageVO cutterImageVOList cutterImageService.getCutterImageList(startTime,endTime,deviceName);long start System.currentTimeMillis();String zipFileName 豁口图片数据;response.setCharacterEncoding(utf-8);response.setContentType(application/zip);response.setHeader(Content-Disposition, attachment;filename URLEncoder.encode(zipFileName .zip, UTF-8));//创建excel临时文件final File tempFile File.createTempFile(tempExcel, .xls);EasyExcel.write(tempFile.getCanonicalPath(),CutterImageVO.class).excelType(ExcelTypeEnum.XLS).registerWriteHandler(new ExcelHyperlinkHandler(1, new int[]{7})).sheet(豁口图片数据).doWrite(cutterImageVOList);logger.info(临时文件所在的本地路径 tempFile.getCanonicalPath());ExecutorService executor new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(20), new MyRejectedExecutionHandler());ParallelScatterZipCreator parallelScatterZipCreator new ParallelScatterZipCreator(executor);OutputStream outputStream response.getOutputStream();ZipArchiveOutputStream zipArchiveOutputStream new ZipArchiveOutputStream(outputStream);zipArchiveOutputStream.setEncoding(UTF-8);try {for (int i 0; i cutterImageVOList.size(); i) {int finalI i;String fileName null;if (finalI cutterImageVOList.size()) {fileName 豁口图片数据.xls;} else {fileName cutterImageVOList.get(i).getImageUrl();}String finalFileName fileName;final InputStreamSupplier inputStreamSupplier () - {try {InputStream inputStream null;if (finalI cutterImageVOList.size()) {inputStream new FileInputStream(tempFile.getCanonicalPath());} else {inputStream minioUtil.getDownloadInputStream(finalFileName);}return inputStream;} catch (Exception e) {e.printStackTrace();return new NullInputStream(0);}};ZipArchiveEntry zipArchiveEntry new ZipArchiveEntry(fileName);zipArchiveEntry.setMethod(ZipArchiveEntry.DEFLATED);zipArchiveEntry.setUnixMode(UnixStat.FILE_FLAG | 436);parallelScatterZipCreator.addArchiveEntry(zipArchiveEntry, inputStreamSupplier);}parallelScatterZipCreator.writeTo(zipArchiveOutputStream);}catch(Exception e){log.error(文件流读取失败,e);e.printStackTrace();}finally {IOUtils.closeQuietly(zipArchiveOutputStream);IOUtils.closeQuietly(outputStream);}//程序退出时删除临时文件tempFile.deleteOnExit();long end System.currentTimeMillis();log.info(耗时:(end-start));}
Minio工具类
public InputStream getDownloadInputStream(String fileName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {InputStream is client.getObject(GetObjectArgs.builder().bucket(minioConfig.getBucketName()).object(fileName).build());return is;}