使用 Spring' RestTemplate 以块的形式发送文件
Sending Files as Chunks using Spring' RestTemplate
我要调用一个 POST REST API,它在其主体中接受一个文件。
如果我发送几个 KB 的文件(使用下面的代码)大约需要 300 毫秒。而且,如果我发送大约 5 GB 的文件,它会抛出内存不足异常。
有没有一种方法可以按顺序将文件作为块发送?目前,我们正在避免任何并行处理。
非常感谢代码或参考方面的任何帮助。
public static Resource getTestFile() throws IOException {
Path testFile = Paths.get(FILE_PATH);
System.out.println("Creating and Uploading Test File: " + testFile);
return new FileSystemResource(testFile.toFile());
}
private static void uploadSingleFile() throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("file", getTestFile());
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
String serverUrl = "http://localhost:8080/place";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<DataTransportResponse> response = restTemplate.postForEntity(serverUrl, requestEntity,
DataTransportResponse.class);
System.out.println("Response code: " + response.getStatusCode());
}
spring:
application:
name: file-manager
servlet:
multipart:
max-file-size: 20480MB
max-request-size: 2048MB
application:
seal:
id: 104912
你可以这样试试
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(54525952); //...specify your size of file (20971520 - 20 MB) (54525952 - 52 MB)
return multipartResolver;
}
我从这个 link post 中找到了这个参考。希望对大家有帮助。
我通过-
解决了这个问题
MultiValueMap<String, String> fileMap = new LinkedMultiValueMap<>();
fileMap.add(HttpHeaders.CONTENT_DISPOSITION, contentDisposition.toString());
我要调用一个 POST REST API,它在其主体中接受一个文件。
如果我发送几个 KB 的文件(使用下面的代码)大约需要 300 毫秒。而且,如果我发送大约 5 GB 的文件,它会抛出内存不足异常。
有没有一种方法可以按顺序将文件作为块发送?目前,我们正在避免任何并行处理。
非常感谢代码或参考方面的任何帮助。
public static Resource getTestFile() throws IOException {
Path testFile = Paths.get(FILE_PATH);
System.out.println("Creating and Uploading Test File: " + testFile);
return new FileSystemResource(testFile.toFile());
}
private static void uploadSingleFile() throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("file", getTestFile());
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
String serverUrl = "http://localhost:8080/place";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<DataTransportResponse> response = restTemplate.postForEntity(serverUrl, requestEntity,
DataTransportResponse.class);
System.out.println("Response code: " + response.getStatusCode());
}
spring:
application:
name: file-manager
servlet:
multipart:
max-file-size: 20480MB
max-request-size: 2048MB
application:
seal:
id: 104912
你可以这样试试
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(54525952); //...specify your size of file (20971520 - 20 MB) (54525952 - 52 MB)
return multipartResolver;
}
我从这个 link post 中找到了这个参考。希望对大家有帮助。
我通过-
解决了这个问题MultiValueMap<String, String> fileMap = new LinkedMultiValueMap<>();
fileMap.add(HttpHeaders.CONTENT_DISPOSITION, contentDisposition.toString());