为什么我们无法从java中的RequestBody获取文件数据?

Lab*_*beo 7 file-upload spring-mvc

我正在尝试将文件上传到服务器,所以我试图使用@RequestBody获取文件的数据,但我在尝试上传文件时收到415错误代码.

所以我用Google搜索(获得上传文件的解决方案)并且知道我无法从请求正文中获取文件数据.所以我想知道为什么我们无法从请求体访问文件数据,因为数据将在HTTP请求中的请求体中发送,所以我想知道在上传文件的情况下请求是如何发生的.

我之前的服务器代码:

@RequestMapping(value = "/upload",headers = "Content-Type=multipart/form-data", method = RequestMethod.POST)
@ResponseBody
public String upload(@RequestBody MultipartFile file)
{
}
Run Code Online (Sandbox Code Playgroud)

解:

@RequestMapping(value = "/upload",headers = "Content-Type=multipart/form-data", method = RequestMethod.POST)
@ResponseBody
public String upload(MultipartHttpServletRequest request)
{
}
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 6

从技术上讲,你可以编写自己的HttpMessageConverter解析完整的多部分请求体,但你必须有一个非常具体的目标类型,可以处理所有的部分.

你会注意到javadoc的 @RequestBody

指示方法参数的注释应绑定到Web请求的主体.

意图是将整个请求体绑定到方法参数.如何将多部分请求的每个部分绑定到单个参数?有点像MultiValueMap<String, Object>(这是什么FormHttpMessageConverter时候使用 multipart请求).但这不是很有用,因为你必须检查每个值的类型.

作为开发人员,确切地指定您需要的内容会更有意义.这就是原因@RequestParam并且@RequestPart可用.


Vik*_*ats 5

因为这些文件不是请求体,所以它们是它的一部分,并且没有内置的HttpMessageConverter可以将请求转换为MultiPartFile数组.这就是它的工作原理@RequestParam("file") MultipartFile[] files

代替

@RequestBody MultipartFile file 
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.