2008-12-10 6 views
34

Meine Anwendung empfängt E-Mails über SMTP-Server. Es gibt einen oder mehrere Anhänge im E-Mail- und E-Mail-Anhang, die als Byte [] zurückgegeben werden (mit sun javamail api).In Java: Wie zip-Datei von Byte [] Array?

Ich versuche, die Anlagedateien im laufenden Betrieb zu komprimieren, ohne sie zuerst auf die Festplatte zu schreiben.

Was ist/ist ein möglicher Weg, um dieses Ergebnis zu erreichen?

Antwort

89

können Sie Java java.util.zip.ZipOutputStream verwenden, um eine Zip-Datei im Speicher zu erstellen. Zum Beispiel:

public static byte[] zipBytes(String filename, byte[] input) throws IOException { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ZipOutputStream zos = new ZipOutputStream(baos); 
    ZipEntry entry = new ZipEntry(filename); 
    entry.setSize(input.length); 
    zos.putNextEntry(entry); 
    zos.write(input); 
    zos.closeEntry(); 
    zos.close(); 
    return baos.toByteArray(); 
} 
+2

Sie Herr, mein Tag gerettet! – Leo

+0

@Dave - kann ZipOutputStream als jax-rs-Ausgabe gesendet werden – Varun

1

Vielleicht ist das java.util.zip Paket könnten Sie

helfen

Da Sie fragen, wie von Byte-Array zu konvertieren denke ich (nicht getestet) Sie ByteArrayInputStream Methode

int  read(byte[] b, int off, int len) 
      Reads up to len bytes of data into an array of bytes from this input stream. 
können

dass Sie füttern zu

ZipInputStream This class implements an input stream filter for reading files in the ZIP file format. 
0

Sie können eine ZIP-Datei von Byte-Array erstellen und zum ui streamedContent

public StreamedContent getXMLFile() { 
     try { 
      byte[] blobFromDB= null; 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      ZipOutputStream zos = new ZipOutputStream(baos); 
      String fileName= "fileName"; 
      ZipEntry entry = new ZipEntry(fileName+".xml"); 
      entry.setSize(byteArray.length); 
      zos.putNextEntry(entry); 
      zos.write(byteArray); 
      zos.closeEntry(); 
      zos.close(); 
      InputStream is = new ByteArrayInputStream(baos.toByteArray()); 
      StreamedContent zipedFile= new DefaultStreamedContent(is, "application/zip", fileName+".zip", Charsets.UTF_8.name()); 
      return fileDownload; 
     } catch (IOException e) { 
      LOG.error("IOException e:{} ",e.getMessage()); 
     } catch (Exception ex) { 
      LOG.error("Exception ex:{} ",ex.getMessage()); 
     } 
} 
Verwandte Themen