2015-10-14 60 views
1

我需要編寫一個代碼將字節數組轉換爲zip文件,並在spring MVC中進行下載。字節數組來自最初是zip文件的web服務。 Zip文件有一個文件夾,該文件夾包含2個文件。我已經寫了下面的代碼來轉換爲字節數組來壓縮輸入流。但我無法轉換成zip文件。請幫助我。這是我的代碼。如何將字節數組轉換爲zip文件並在java中的瀏覽器中下載

ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(bytes)); 
ZipEntry entry = null; 
while ((entry = zipStream.getNextEntry()) != null) { 

    String entryName = entry.getName(); 

    FileOutputStream out = new FileOutputStream(entryName); 

    byte[] byteBuff = new byte[4096]; 
    int bytesRead = 0; 
    while ((bytesRead = zipStream.read(byteBuff)) != -1) 
    { 
     out.write(byteBuff, 0, bytesRead); 
    } 

    out.close(); 
    zipStream.closeEntry(); 
} 
zipStream.close(); 

回答

0

我在這裏假設你想寫一個字節數組到一個zip文件。由於發送的數據也是一個壓縮文件,要保存的文件也是壓縮文件,因此不應該是個問題。 2個步驟,將其保存在磁盤上並返回文件。

保存在磁盤部分:

File file = new File(/path/to/directory/save.zip); 
      if (file.exists() && file.isDirectory()) { 
       try { 
        OutputStream outputStream = new FileOutputStream(new File(/path/to/directory/save.zip)); 
        outputStream.write(bytes); 
        outputStream.close(); 
       } catch (IOException ignored) { 

       } 
      } else { // create directory and call same code } 
} 

現在把它找回來,並下載它,你需要一個控制器:

@RequestMapping(value = "/download/attachment/", method = RequestMethod.GET) 
    public void getAttachmentFromDatabase(HttpServletResponse response) { 
     response.setContentType("application/octet-stream"); 
response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getFileName() + "\""); 
        response.setContentLength(file.length); 
        FileCopyUtils.copy(file as byte-array, response.getOutputStream()); 
        response.flushBuffer(); 
} 

我已經編輯我的代碼,這樣你纔會有在100%適合你之前做一些改變。讓我知道這是你在找什麼。如果不是,我會刪除我的答案。請享用。

+0

感謝您的回覆。輸入不是一個zip文件。我得到一個zip文件的字節數組。現在我需要將其轉換爲zip文件並根據請求進行下載。 – user2390827

+0

是的...我給你的​​代碼假設輸入是在bytearry ...將文件保存爲zip在磁盤上,可供下載whenevrr需要 –

+0

真棒它的工作非常感謝。但是在你的代碼中有一個疑問是你正在輸出到一個文件中,我可以下載該文件而不將它存儲在磁盤中? – user2390827

相關問題