【发布时间】:2018-01-26 04:01:35
【问题描述】:
我遇到了一个上传文件的请求,使用 spring resttemplate 上传文件 使用 http 标头“multipart/form-data”,还需要发布一些其他正常参数。如何实现?
【问题讨论】:
我遇到了一个上传文件的请求,使用 spring resttemplate 上传文件 使用 http 标头“multipart/form-data”,还需要发布一些其他正常参数。如何实现?
【问题讨论】:
根据您的正常参数替换参数和值。
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());
【讨论】:
您可以使用此代码。
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);
这将发送带有两个参数的 post call,您可以根据自己的意愿添加更多。
也请看看这个stackoverflow answer
【讨论】: