2016-07-20 16 views
2

im einem Download alle Funktionen zu implementieren versuchen, ist meine Anforderung Datei in ZIP-komprimiert werden soll, heren die UIDownload-Dateien vom Server und komprimieren sie im Zip-Format

<p:toolbar> 
    <f:facet name="right"> 
     <p:commandButton value="Download all photos" ajax="false" actionListener="#{ManageActivities.getAllParticipantPhoto}" onclick="PrimeFaces.monitorDownload(start, stop);" icon="ui-icon-image"> 
      <p:fileDownload value="#{ManageActivities.file}" /> 
     </p:commandButton> 
    </f:facet></p:toolbar> 

und hier ist der managedbean Code

private StreamedContent file; 

public void getAllParticipantPhoto() { 
    ByteArrayInputStream bis = new ByteArrayInputStream(zipBytes()); 
    InputStream stream = bis; 
    file = new DefaultStreamedContent(stream, "zip", "photos.zip"); 

}

private byte[] zipBytes() { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ZipOutputStream zos = new ZipOutputStream(baos); 

    try{ 
     for(Participants p : partcpnts){ 
      if(p.getPhoto() != null){ 
       ZipEntry entry = new ZipEntry(p.getFirstName()+".jpg"); 
       zos.putNextEntry(entry); 
       zos.write(p.getPhoto()); 
       }     
      } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

    return baos.toByteArray(); 
} 

i-Datei als ZIP erfolgreich herunterladen kann, aber ich bin nicht in der Lage zu extrahieren es, Fenster veranlasst the'cannot geöffnete Datei als Archiv‘Fehler

+0

@Javier festen Wechsel hinzugefügt haben die ZipOutputStream zu schließen, noch Dateien können nicht extrahiert werden –

+0

Können Sie die HTTP-Antwortheader beim Herunterladen der ZIP-Datei posten? Scheitert es in allen Browsern? – Javier

Antwort

3

file = new DefaultStreamedContent(stream, "zip", "photos.zip"); 

zu

file = new DefaultStreamedContent(stream, "application/zip", "photos.zip", Charsets.UTF_8.name()); 

es i

+0

Mein Problem wird durch diese Lösung gelöst. Vielen Dank :) – Maciej