如何使用ProxyExchange发送Post Multipart请求?求解决方案
ProxyExchange转发Multipart请求的解决方案
你的问题出在没有将接收的MultipartFile封装到转发的请求体中,ProxyExchange不会自动处理@RequestPart参数的转发逻辑,需要手动构建Multipart格式的请求内容才能完成转发。
以下是修改后的可运行代码:
import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.util.MultiValueMap; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.reactive.function.BodyInserters; import org.springframework.web.servlet.function.ProxyExchange; @PostMapping("/service") public ResponseEntity<byte[]> proxyPost(ProxyExchange<byte[]> proxy, @RequestHeader("authorization") String authorizationHeader, @RequestPart("file") MultipartFile file) throws Exception { // 构建Multipart请求体,将接收的文件封装进去 MultiValueMap<String, Object> multipartBody = BodyInserters.fromMultipartData("file", file.getResource()); // 设置请求头,确保Content-Type符合Multipart格式要求 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); headers.add("Authorization-getway", authorizationHeader); // 配置ProxyExchange的请求体和头信息,执行转发 return proxy.uri(dzOptServiceUri.toString() + "/api/service/") .headers(headers) .body(multipartBody) .post(response -> { return ResponseEntity.status(response.getStatusCode()) .headers(response.getHeaders()) .header("Authorization-getway", authorizationHeader) .body(response.getBody()); }); }
关键细节说明:
- 用
BodyInserters.fromMultipartData将MultipartFile转换为符合要求的Multipart请求体格式,确保目标服务能正确解析文件参数 - 显式指定
Content-Type为multipart/form-data,避免请求头格式不匹配导致的解析失败 - 通过
proxy.body()方法传入构建好的请求体,替代默认的空请求体转发逻辑
如果你的请求中还有其他表单参数,可通过multipartBody.add("paramKey", paramValue)的方式添加到请求体中。
内容的提问来源于stack exchange,提问作者Khaled
相关产品推荐
相关产品推荐

