2016-11-11 46 views
1

我有file.zip在DB像BLOB。我想在Spring控制器中創建方法,以便在客戶端下載此文件。如何從客戶端的控制器下載zip文件?春季開機

@RequestMapping(value = "/downloadResolution/{resolutionId}", method = RequestMethod.GET) 
    public void downloadResolution(@PathVariable("resolutionId") Long resolutionId, HttpServletResponse response) { 
     Resolution resolution = resolutionService.findOne(resolutionId); 
     ResolutionArchive resolutionArchive = resolution.getResolutionArchive(); 
     if (resolutionArchive == null) return; 
     byte[] archive = resolutionArchive.getArchive(); 
     //this byte[] archive - my zip file from db 
    } 

我該如何改變這個methot爲了在客戶端下載這個?

用戶按下載按鈕。 Methos從byte []中獲取數據,用戶可以下載它。

編輯

我試過@pleft的解決方案,它的工作。我知道 - 我使用阿賈克斯的呼叫方法

function downloadResolution(resulutionId) { 
     $.ajax({ 
      type: 'GET', 
      dataType: "json", 
      url: '/downloadResolution/' + resulutionId, 
      success: function (data) { 
      }, 
      error: function (xhr, str) { 
      } 
     }); 
    } 

如何實現這一點,如果我使用ajax?

回答

4

您可以使用HttpServletResponseOutputStream那裏寫你的檔案字節。

例如

response.setHeader("Content-Disposition", "attachment; filename=file.zip"); 
response.setHeader("Content-Type", "application/zip"); 
response.getOutputStream().write(archive); 

編輯

樣本下載

@RequestMapping(value = "/downloadResolution/{resolutionId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) 
public void downloadResolution(@PathVariable("resolutionId") Long resolutionId, HttpServletResponse response) throws IOException { 
    String test = "new string test bytes"; 
    response.setHeader("Content-Disposition", "attachment; filename=file.txt"); 
    response.getOutputStream().write(test.getBytes()); 
} 
+0

不顯示窗口,用於保存文件時,我按下「下載」,被執行downloadResolution方法 – user5620472

+0

你確定你的'resolutionArchive'不爲空?因爲在你的代碼中我看到'if(resolutionArchive == null)return;'因此如果你的程序返回什麼都不會發生。你可以調試嗎? – pleft

+0

是的,我確定。它不是NULL。 – user5620472