Возвращение ZipOutputStream в браузер - PullRequest
6 голосов
/ 01 апреля 2011

У меня есть ZipOutputStream, который я хочу вернуть в браузер. Мне хотелось бы, чтобы пользователь щелкал тег привязки, а затем отображался запрос на загрузку файла для имеющегося у меня ZipOutputStream.

Как вернуть ZipOutputStream в браузер?

1 Ответ

14 голосов
/ 01 апреля 2011

Только вчера пришлось сделать то же самое.

    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();
    }

Примечание. Я использую оболочку ByteArrayOutputStream и toByteArray, но вы, вероятно, могли бы просто записать любой другой тип Outputstream непосредственно в ответ с помощью стандартного цикла InputStream.read () OutputStream.write ().

От руки Я на самом деле не уверен, что быстрее, если таковые имеются, но я подозреваю, что мое использование ByteArrayOutputStream здесь может быть не самым сознательным подходом к памяти:

...