【发布时间】:2019-06-30 20:04:09
【问题描述】:
我的项目中只有一个开胃菜:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
2.1.6-发布
我尝试上传文件并使用MultipartFile,但无法正常工作。
该框架的工作方式类似于urlencoded form
@PostMapping(value = "/image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Mono<ResponseEntity<List<String>>> searchByImage(@RequestParam("file") MultipartFile file) throws Exception {
return Mono.just(ResponseEntity.ok(service.guess(file.getBytes())));
}
并抛出
java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern
at java.base/java.net.URLDecoder.decode(URLDecoder.java:225) ~[na:na]
at java.base/java.net.URLDecoder.decode(URLDecoder.java:142) ~[na:na]
at org.springframework.http.codec.FormHttpMessageReader.parseFormData(FormHttpMessageReader.java:146) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at org.springframework.http.codec.FormHttpMessageReader.lambda$readMono$0(FormHttpMessageReader.java:113) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:107) ~[reactor-core-3.2.10.RELEASE.jar:3.2.10.RELEASE]
at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext(FluxContextStart.java:103) ~[reactor-core-3.2.10.RELEASE.jar:3.2.10.RELEASE]
错误发生:
private MultiValueMap<String, String> parseFormData(Charset charset, String body) {
String[] pairs = StringUtils.tokenizeToStringArray(body, "&");
MultiValueMap<String, String> result = new LinkedMultiValueMap<>(pairs.length);
try {
for (String pair : pairs) {
int idx = pair.indexOf('=');
if (idx == -1) {
result.add(URLDecoder.decode(pair, charset.name()), null);
}
else {
String name = URLDecoder.decode(pair.substring(0, idx), charset.name());
String value = URLDecoder.decode(pair.substring(idx + 1), charset.name());
result.add(name, value);
}
}
}
我转而使用FilePart,但得到相同的结果...
我错过了一些配置吗?
【问题讨论】:
-
在@deshi 下面看到我的回答无济于事