gpt4 book ai didi

spring - 如何使用 spring RestTemplate 发送 multipartFile?

转载 作者:行者123 更新时间:2023-12-03 19:45:17 41 4
gpt4 key购买 nike

我正在尝试将文件从一个 SpringBoot 应用程序发布到另一个 SpringBoot 应用程序。
我试图到达的终点看起来像

@PostMapping(
value = "/upload",
consumes = MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<ArmResponse<JobData>> uploadInvoices(@RequestParam("file") MultipartFile interestingStuff) {

String incomingFilename = interestingStuff.getName();
String originalFilename = interestingStuff.getOriginalFilename();
String contentType = interestingStuff.getContentType();

// do interesting stuff here

return ok(successfulResponse(new JobData()));
}

应用程序中向 thios 端点执行 POST 请求的代码如下所示
public void loadInvoices(MultipartFile invoices) throws IOException {

File invoicesFile = new File(invoices.getOriginalFilename());
invoices.transferTo(invoicesFile);

LinkedMultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
parts.add("file", invoicesFile);


HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

HttpEntity<LinkedMultiValueMap<String, Object>> httpEntity = new HttpEntity<>(parts, httpHeaders);

String url = String.format("%s/rest/inbound/invoices/upload", baseUrl);

final List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
messageConverters.add(new ByteArrayHttpMessageConverter());
messageConverters.add(new ResourceHttpMessageConverter());
messageConverters.add(new AllEncompassingFormHttpMessageConverter());
messageConverters.add(new FormHttpMessageConverter());
messageConverters.add(new SourceHttpMessageConverter<Source>());

RestTemplate template = new RestTemplate(messageConverters);

template.exchange(
url,
HttpMethod.POST,
httpEntity,
new ParameterizedTypeReference<ArmResponse<JobData>>() {

});
}

如果我使用 postman 以表格形式发布文件 - 它可以工作
Postman 请求的 content-type header 看起来像
content-type:"multipart/form-data; boundary=--------------------------286899320410555838190774"

当 RestTemplate 执行 POST 时,我收到以下错误。

com.fasterxml.jackson.databind.exc.MismatchedInputException:由于[来源:(字符串)“”的输入结束,没有要映射的内容;行:1,列:0]

我怀疑请求中发送的内容类型 header 是错误的。
有谁知道如何正确设置 MULTIPART_FORM_DATA 的内容类型 header ?

最佳答案

与往常一样,解决方案非常简单。只需在 multipartFile 上调用 getResource()。

public void loadInvoices(MultipartFile invoices) throws IOException {

Resource invoicesResource = invoices.getResource();

LinkedMultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
parts.add("file", invoicesResource);

HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

HttpEntity<LinkedMultiValueMap<String, Object>> httpEntity = new HttpEntity<>(parts, httpHeaders);

restTemplate.postForEntity("my/url", httpEntity, SommeClass.class);
}

关于spring - 如何使用 spring RestTemplate 发送 multipartFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55138538/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com