所以我目前正在使用Spring构建Multipart-Fileupload。我想创建我的控制器是通用的,因为它可以为我自己的模块化控制器应用程序启用良好的开端。这就是我与@RequestParam Map<String, Object> requestParams
合作的原因。所以我的虚拟函数看起来像这样:
@RequestMapping(path = "uploadtest", method = POST, consumes = MULTIPART_FORM_DATA_VALUE)
public String test(@RequestParam("file") MultipartFile file,
@RequestParam Map<String, Object> requestParams) {
return "/[...]";
}
现在,当我发布一个文件时,我会认为它可以通过file
- 变量(工作,确定。)和requestParams.get("file")
(不起作用)。
所以这是我的问题:
这是否会像这样工作,或者是否只为常规@RequestParams
注释启用了多部分支持(= Bug / Feature?)。
答案 0 :(得分:1)
多部分请求由几个部分组成。在multipart/form-data
的情况下,第一部分应该由参数/值对组成,这些参数/值对也可以作为@RequestParam
使用。其他部分是文件。
当你有@RequestParam MultipartFile file
Spring知道你想要与file
参数相关联的部分。由于文件是一个部分,您还可以使用@RequestPart("file") MultipartFile file
。
请记住,请求参数是字符串。因此Map<String, Object>
与Map<String, String>
基本相同。因此requestParams.get("file")
将为您提供请求第一部分中file
参数的String值。
&#34;我想创建我的控制器,因为它可以是&#34; 您更希望它尽可能具体。如果你想保持通用,那么首先不要使用控制器。
答案 1 :(得分:1)
我创建了一个伟大的解决方案来获取文件映射为 Map
@PostMapping(consumes = {MULTIPART_FORM_DATA_VALUE})
ResponseEntity<String> createDocument(@RequestParam Map<String, String> allParams, HttpServletRequest request)
Map<String, MultipartFile> fileMap = new HashMap<String, MultipartFile>();
if (request instanceof MultipartHttpServletRequest) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
fileMap = multiRequest.getFileMap();
}