Search code examples
javahtmlhttpzip

Returning ZipOutputStream to browser


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?


Solution

  • 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: