通过分段文件上传处理动态密钥

for*_*rtm 1 java spring spring-mvc spring-boot

使用下面的 API 和 input ,会消耗多部分/表单请求,但对于所有文件,键是静态“文件”,因为RequestPart("files") 但是所有字符串的键都是动态的,因为Map<String,String>

@PostMapping(value = "/xyz", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> uploads(@RequestPart("files") MultipartFile[] outputFiles, @RequestParam Map<String, String> keyValues {
...
}

files - file_1_name
files - file_2_name
files - file_3_name
key1  - value1
key2  - value2
Run Code Online (Sandbox Code Playgroud)

然而下面的 API 并没有按预期工作。需要为上传的每个文件提供动态密钥,并且要上传的文件总数未知,因此使用 >Map<String, MultipartFile而不是MultipartFile[]。它仍然期望每个上传的文件都有静态密钥“outputFiles”。

@PostMapping(value = "/xyz", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> uploads(@RequestPart Map<String, MultipartFile> outputFiles, @RequestParam Map<String, String> keyValues {
...
}

Input
======
file_1_name - file_1_any_name
file_2_name - file_2_any_name
file_3_name - file_3_any_name
key1  - value1
key2  - value2
Run Code Online (Sandbox Code Playgroud)

我们是否可以支持像 file_name_1、file_name_2 (如上所示)这样的动态键来进行文件上传,就像Map<String, MultipartFile>使用 spring boot / spring mvc 一样Map<String,String>

for*_*rtm 5

接受MultipartHttpServletRequest request作为控制器的参数也允许动态键进行多部分/表单文件上传。

request.getParameterMap()
request.getFileMap()
Run Code Online (Sandbox Code Playgroud)