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

如何使用RESTTemplate转发大文件?

洪英豪
2023-03-14
Resource zipFile = new FileSystemResource(tempFile.getAbsolutePath());
ByteArrayResource r = new ByteArrayResource(inputStream.getBytes());

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

共有1个答案

夏志国
2023-03-14

编辑:其他答案更好(使用资源)https://stackoverflow.com/a/36226006/116509

我原来的答案是:

对于这种低级操作,可以使用execute。在这个片段中,我使用了Commons IO的copy方法来复制输入流。您需要自定义HttpMessageConverterExtractor以获得所需的响应类型。

final InputStream fis = new FileInputStream(new File("c:\\autoexec.bat")); // or whatever
final RequestCallback requestCallback = new RequestCallback() {
     @Override
    public void doWithRequest(final ClientHttpRequest request) throws IOException {
        request.getHeaders().add("Content-type", "application/octet-stream");
        IOUtils.copy(fis, request.getBody());
     }
};
final RestTemplate restTemplate = new RestTemplate();
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setBufferRequestBody(false);     
restTemplate.setRequestFactory(requestFactory);     
final HttpMessageConverterExtractor<String> responseExtractor =
    new HttpMessageConverterExtractor<String>(String.class, restTemplate.getMessageConverters());
restTemplate.execute("http://localhost:4000", HttpMethod.POST, requestCallback, responseExtractor);
 类似资料:
  • 问题内容: 我有一个网络服务电话,可以通过该电话上传zip文件。然后将文件转发到另一个服务以进行存储,解压缩等。目前,文件已存储在文件系统中,然后构建了FileSystemResource。 我可以使用ByteStreamResource来节省时间(转发之前不需要在磁盘上保存文件),但是为此,我需要构建一个字节数组。如果文件很大,我将收到“ OutOfMemory:java堆空间”错误。 使用Re

  • 问题内容: 如何使用Spring RestTemplate发送数组参数? 这是服务器端的实现: 这是我尝试过的: 以下是实际的请求URL,这显然是错误的: 一直在尝试搜索,但是找不到解决方案。任何指针将不胜感激。 问题答案: Spring的UriComponentsBuilder做到了这一点,并且还允许变量扩展。假设您要将字符串数组作为参数“ attr”传递给资源,而该资源只有一个带有路径变量的U

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

  • 这就是我如何尝试使用RestTemplate调用服务器, 这就是我如何使用它(用于测试) 我的登录响应类及其子类, null null null null 公共类BaseResponse{ 受保护字符串StatusCode; 我的问题是,1。为什么调用服务器时会出现此错误 信息:org.springframework.beans.factory.support.defaultListableBea

  • 问题内容: 我想将以下(工作)curl代码段转换为RestTemplate调用: 如何正确传递email参数?以下代码导致404 Not Found响应: 我试图在PostMan中制定正确的调用,并且可以通过在主体中将email参数指定为“ form- data”参数来使其正常工作。在RestTemplate中实现此功能的正确方法是什么? 问题答案: POST方法应沿着HTTP请求对象发送。并且该

  • 问题内容: 是否可以使用发送 请求,例如? 我想将以下xml发送到url 我是否还想在每个请求上动态添加自定义http标头(!)。 我怎样才能在春季实现这一目标? 问题答案: 首先,定义标题,如下所示: 您可以使用此方法设置任何标题。对于众所周知的标题,您可以使用预定义的方法。例如,为了设置标题: 然后定义一个或准备您的请求对象: 如果您可以某种方式访问​​该字符串,则可以使用。否则,您可以定义一