基于此处的解决方案(对于Plain
Servlet),您也可以对基于Spring MVC的控制器执行相同的操作。
@RequestMapping(value = "/export", method = RequestMethod.GET)public void getFile(OutputStream out) { FileSystemResource resource = new FileSystemResource("c:file.csv"); try (ZipOutputStream zippedOut = new ZipOutputStream(out)) { ZipEntry e = new ZipEntry(resource.getName()); // Configure the zip entry, the properties of the file e.setSize(resource.contentLength()); e.setTime(System.currentTimeMillis()); // etc. zippedOut.putNextEntry(e); // And the content of the resource: StreamUtils.copy(resource.getInputStream(), zippedOut); zippedOut.closeEntry(); zippedOut.finish(); } catch (Exception e) { // Do something with Exception } }您
ZipOutputStream基于响应创建了一个
OutputStream(您可以简单地将其注入到方法中)。然后为压缩后的流创建一个条目并将其写入。
除了,
OutputStream您还可以连接,
HttpServletResponse以便您可以设置文件名和内容类型。
@RequestMapping(value = "/export", method = RequestMethod.GET)public void getFile(HttpServletResponse response) { FileSystemResource resource = new FileSystemResource("c:file.csv"); response.setContentType("application/zip"); response.setHeader("Content-Disposition", "attachment; filename=file.zip"); try (ZipOutputStream zippedOut = new ZipOutputStream(response.getOutputStream())) { ZipEntry e = new ZipEntry(resource.getName()); // Configure the zip entry, the properties of the file e.setSize(resource.contentLength()); e.setTime(System.currentTimeMillis()); // etc. zippedOut.putNextEntry(e); // And the content of the resource: StreamUtils.copy(resource.getInputStream(), zippedOut); zippedOut.closeEntry(); zippedOut.finish(); } catch (Exception e) { // Do something with Exception } }


