相关文章推荐
完美的生姜  ·  js ...·  1 年前    · 
自信的小狗  ·  软件安装遇到 ...·  1 年前    · 
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @Override public void batchDownloadByFileIds (List<String> fileIds, HttpServletResponse response) { response.setContentType( "application/octet-stream; charset=UTF-8" ); Map<String, InputStream> fileEntries = new HashMap <String, InputStream>(); Map<String, FileInfo> fileMap = new HashMap <String, FileInfo>(); try ( InputStream inputStream = filesSDKClient.downloadMulti(fileIds); ServletOutputStream outputStream = response.getOutputStream(); ZipInputStream zis = new ZipInputStream (inputStream); File zipFile = File.createTempFile( "package" , ".zip" ); for (String fileId : fileIds) { FileInfo fileInfo = filesSDKClient.getFileInfo(fileId); if (ObjectUtil.isNotEmpty(fileInfo)) { fileMap.put(fileInfo.getId(), fileInfo); ZipEntry zipEntry = null ; while ((zipEntry = zis.getNextEntry()) != null ) { fileEntries.put(zipEntry.getName(), convertZipInputStreamToInputStream(zis)); zipFiles(fileEntries, fileMap, zipFile); FileInputStream fis = new FileInputStream (zipFile); response.setHeader( "Content-disposition" , "attachment;filename*=utf-8''" + "package.zip" ); IoUtil.copy(fis, outputStream); } catch (IOException e) { e.printStackTrace(); } catch (FilesSDKException e) { e.printStackTrace(); private InputStream convertZipInputStreamToInputStream ( final ZipInputStream in) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream (); IoUtil.copy(in, out); InputStream is = new ByteArrayInputStream (out.toByteArray()); return is; private void zipFiles (Map<String, InputStream> fileEntries, Map<String, FileInfo> fileMap, File zipFile) { try ( ZipOutputStream zos = new ZipOutputStream ( new FileOutputStream (zipFile));) { for (Map.Entry<String, InputStream> fileEntry : fileEntries.entrySet()) { String fileKey = fileEntry.getKey(); FileInfo fileInfo = fileMap.get(fileKey); if (ObjectUtil.isNotEmpty(fileInfo)) { zos.putNextEntry( new ZipEntry (fileInfo.getFileName())); IoUtil.copy(fileEntry.getValue(), zos); zos.closeEntry(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException ioException) { ioException.printStackTrace(); 复制代码
分类:
后端
标签: