2016-09-28 54 views
1

我正在使用Spring Boot 1.2.5,我想上傳一個原始的二進制文件到控制器。文件大小可能很大,所以我不想將整個請求保存在內存中,而是流式傳輸文件,事實上該文件正在生成傳輸啓動,因此客戶端甚至不知道文件的大小。我看到一個示例,說明如何使用多部分編碼文件上傳here做類似的事情。但是,我不希望多部分編碼上傳,只是一個原始的字節流。我似乎無法在春季找到處理這種用例的方法。春季上傳非多部分文件作爲流

回答

1

您可以只使用HttpServletRequest輸入流。
請注意,如果您有任何預處理請求並使用輸入流的過濾器,那麼這可能不起作用。

@ResponseBody 
@RequestMapping(path="fileupload", method = RequestMethod.POST, consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE) 
public void fileUpload(HttpServletRequest request) throws IOException { 
    Files.copy(request.getInputStream(), Paths.get("myfilename")); 
} 
+0

要清楚的是,當上傳仍在進行中時調用此處理函數。意思是沒有數據存儲在臨時文件中,並且整個文件在調用時尚未存儲在內存中,是正確的? – cmaynard

+0

@cmaynard一旦處理請求頭,就會進入該方法。然後你會得到一個請求體的流。有可能你可能有一個servlet過濾器,它使用'TeeInputStream'來保存自己的請求體的緩衝區,但是在默認的spring-boot,spring-mvc項目中你不應該有這樣的東西。 – Magnus