I have an ZipOutputStream that I want to return to the browser. The experience I would like is that the user clicks an anchor tag, and then a file download prompt is displayed for the ZipOutputStream that I have.
How do you get the ZipOutputStream back to the browser?
Advertisement
Answer
Just had to do this exact same thing yesterday.
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ZipOutputStream zip = new ZipOutputStream(baos); .... populate ZipOutputStream String filename = "out.zip"; // the response variable is just a standard HttpServletResponse response.setHeader("Content-Disposition","attachment; filename="" + filename + """); response.setContentType("application/zip"); try{ response.getOutputStream().write(baos.toByteArray()); response.flushBuffer(); } catch (IOException e){ e.printStackTrace(); } finally{ baos.close(); }
Note I’m using a ByteArrayOutputStream wrapper and toByteArray but you could probably just write any other type of Outputstream directly to the response with a standard InputStream.read() OutputStream.write() loop.
Off hand I’m actually not sure which is faster if any, but I suspect my use of ByteArrayOutputStream here might not be the most memory conscious approach: