当前位置: 首页 > 知识库问答 >
问题:

使用Spring的RestTemplate将文件作为块发送

顾涵衍
2023-03-14

我将调用一个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

共有2个答案

秦学林
2023-03-14

我把它解决了-

MultiValueMap<String, String> fileMap = new LinkedMultiValueMap<>();
            fileMap.add(HttpHeaders.CONTENT_DISPOSITION, contentDisposition.toString());
何建中
2023-03-14

你可以试试这条路

@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;
}

我从这个链接帖子中找到了这个参考。希望对你有帮助。

 类似资料:
  • 在我的Spring Boot应用程序中,我需要将String值与MultipartFile一起作为传递。Controller在下面,我将MultipartFile转换为,然后在的帮助下将其传递给DAO Controller。 来自Angular的请求将首先命中Upload Controller,然后UploadController是客户端(Java),它将使用基URL调用服务器svs-ba-dao

  • 我有两台服务器,其中服务器A向服务器B发送文件。在服务器B上,我有一个接收给定类别文件的endpoint。这是我需要将文件发送到的endpoint的签名: 现在我在用RESTTemplateExchange创建这样的请求时遇到了麻烦。在服务器A上,我试图逐个发送文件(服务器B上的endpoint需要接受多部分数组,因为它也在其他地方使用)。这就是我所尝试的: 这几乎工作,唯一的问题是,在服务器B从

  • 问题内容: 我有一个网络服务电话,可以通过该电话上传zip文件。然后将文件转发到另一个服务以进行存储,解压缩等。目前,文件已存储在文件系统中,然后构建了FileSystemResource。 我可以使用ByteStreamResource来节省时间(转发之前不需要在磁盘上保存文件),但是为此,我需要构建一个字节数组。如果文件很大,我将收到“ OutOfMemory:java堆空间”错误。 使用Re

  • 使用RESTTemplate转发文件而不得到OutOfMemory错误的解决方案吗?

  • 希望Spring大师能在这方面帮助我,Iam开发了一个多web服务应用程序,所有这些web服务都基于一个名为based-server的Jar,它得到了所有可以在任何需要的地方继承的基类。因此,在这个基础服务器项目中,我有一个BaseClient类,它有一个spring RestTemplate属性。当我试图在实际实现的web服务类中使用这个客户机(原因是继承)时,当我试图执行POST请求时,它会给

  • 我正在尝试使用Spring RestTemplate发布数据,如下所示: 你能提供我一个简单的例子来实现我想要的。