使用 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());