2013-08-26 2 views
0

У меня есть папка, я пытаюсь ее застегнуть, а на случай нажатия кнопки она должна быть загружена на компьютере пользователя. Я могу правильно создать zip-файл. Я написал код, чтобы загрузить его, но после того, как он загружается на компьютер пользователя с сервера. Он показывает, что невозможно открыть zip-файл, поскольку он недействителен.Невозможно правильно загрузить созданный zipped-файл с сервера

Как это вызвано и как я могу его решить? Вот код, который выполняет загрузку.

public String getAsZip() {        
     try { 
     FacesContext ctx = FacesContext.getCurrentInstance(); 
     ExternalContext etx = ctx.getExternalContext(); 
     HttpServletResponse response = (HttpServletResponse) etx 
       .getResponse(); 
     ServletOutputStream zipFileOutputStream = response 
       .getOutputStream(); 
     response.setContentType("application/octet-stream"); 
     response.setHeader(
       "Content-Disposition", 
       "attachment; filename=" + downloadLink.substring(downloadLink.lastIndexOf("\\") + 1,downloadLink.length())); 
     response.setHeader("Cache-Control", "no-cache"); 

     File zipFile = new File(downloadLink); 
     FileInputStream stream = new FileInputStream(zipFile); 
     response.setContentLength(stream.available()); 

     int length = 0; 
     byte[] bbuf = new byte[response.getBufferSize()]; 
     BufferedInputStream in = new BufferedInputStream(stream); 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

     while ((length = in.read(bbuf)) > 0) { 
      baos.write(bbuf, 0, length); 
     } 

     zipFileOutputStream.write(baos.toByteArray()); 
     zipFileOutputStream.flush(); 
     zipFileOutputStream.close(); 
     response.flushBuffer(); 
     in.close(); 
     stream.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return "successZip"; 
} 

ответ

1

См JSF 2.0 RenderResponse and ResponseComplete

Проблема заключается в том, что вы не вызываете FacesContext # responseComplete(). Вот почему JSF по-прежнему будет отображать представление после того, как вы приложите загрузку и добавите ее в ответ. Это приведет к поломке zip-файла.

+0

Большое спасибо. Проблема решена –

Смежные вопросы