2016-09-28 57 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