java - 如何使用 Spring 5 webClient 上传文件
问题描述
我尝试使用 webClient Spring5 (multipart/form-data) 上传文件,但我收到 400 Badrequest 有我的代码(当我尝试使用 restTemplate 时一切正常),不明白为什么不使用 webclient,任何帮助都是宝贵的, 提前致谢...
MultipartBodyBuilder builder = new MultipartBodyBuilder();
builder.part("subject", parametres.getSubject());
builder.part("lifetime", parametres.getLifeTime());
builder.part("comment", parametres.getComment());
builder.part("encrypted", parametres.getEncrypted());
builder.part("file", new FileSystemResource(file)).filename(file.getName()) //file is a java.io.File`
ClientResponse response = getClient().post()
.uri("/messages")
.body(BodyInserters.fromMultipartData(builder.build()))
.header(PlinePlexHeaderEnum.HTTP_HEADER_PROCURATION_USER_ID.value(), idUser))
.header(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_FORM_DATA_VALUE)
.exchange().block();
解决方案
尝试这个:
final WebClient webClient = webClientBuilder.build();
webClient.post()
.uri("http://hostname:port/messages")
.contentType(MediaType.MULTIPART_FORM_DATA)
.header(PlinePlexHeaderEnum.HTTP_HEADER_PROCURATION_USER_ID.value(), idUser))
.body(BodyInserters.fromMultipartData(buildMultipartBody(file, parametres)))
.retrieve()
.bodyToMono(String.class)
.block();
}
private MultiValueMap < String, HttpEntity << ? >> buildMultipartBody(private File file, private Parametres parametres) {
MultipartBodyBuilder builder = new MultipartBodyBuilder();
builder.part("file", new FileSystemResource(file));
builder.part("subject", parametres.getSubject()); `
builder.part("lifetime", parametres.getLifeTime());`
builder.part("comment", parametres.getComment()); `
builder.part("encrypted", parametres.getEncrypted());`
return builder.build();
}
推荐阅读
- html - 为什么平板电脑屏幕尺寸的卡片重叠?
- javascript - 按键值数组中的值过滤 JavaScript 对象
- cartopy - 安装 cartopy 时出现“ACCEPT_USE_OF_DEPRECATED_PROJ_API_H”错误
- reactjs - 在 React JS 中,我们如何决定是选择 contextAPI 还是 Redux?
- javascript - 使用 conditionalExpression 设置自定义验证器
- javascript - 我想在 React 中使用 Swiper 方法
- powershell - 电源外壳。从 txt 文件和表单列表中选择值
- python - 大稀疏矩阵的低秩逼近
- docker - 无法访问专用服务器上的 docker itzg/minecraft-server
- java - Java如何处理实例方法的方法引用?