Spring Resttemplate:如何同时发布文件和普通字符串数据

问题描述 投票:0回答:3

我遇到一个上传文件的请求,用spring Resttemplate上传文件 使用http标头“multipart/form-data”,还需要发布一些其他正常参数。如何实现?

spring-mvc resttemplate
3个回答
3
投票

您可以在应用程序中使用以下代码来同时拥有

multipart-file
和普通请求参数:

注:

  • 将网址替换为您自己的网址
  • 根据你的正常参数替换参数名称和值
String url = "http://example.com";
String fileAbsPath = "absolute path of your file";
String fileName = new File(fileAbsPath).getName();

Files.readAllBytes(Paths.get(fileAbsPath));

MultiValueMap<String, Object> data = new LinkedMultiValueMap<String, Object>();

ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(Paths.get(fileAbsPath))) {
    @Override
    public String getFilename() {
        return fileName;
    }
};

data.add("file", resource);

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.set("file","application/pdf");

UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
    .queryParam("param1", "value1")
    .queryParam("param2", "value2");

HttpEntity<> entity = new HttpEntity<> (data, requestHeaders);

RestTemplate restTemplate = new RestTemplate();

ResponseEntity<String> result =restTemplate.exchange(
    builder.toUriString(),
    HttpMethod.POST,
    entity,
    String.class
);

System.out.println(result.getBody());

1
投票

您可以使用此代码。

   HttpHeaders headers = getCASHeaders(MediaType.MULTIPART_FORM_DATA);
   LinkedMultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
   params.add("fileField", new FileSystemResource(""));//get file resource
   params.add("stringfield", stringPayload);
   HttpEntity requestEntity = new HttpEntity<>(params, headers);
   ResponseEntity<CasAssetApiResponse> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);

这将发送带有两个参数的后调用,您可以根据您的意愿添加更多参数。

也请看看这个stackoverflow答案


0
投票

尽管我的代码没有任何转换,但我收到错误“无法转换为 java.lang.String”。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.