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

如何在Spring Boot中上传文件并将其传递给另一个服务,而无需将其写入文件系统?

司徒河
2023-03-14

假设我有一个前端。在前面提到的前端,我想上传一个文件。Spring Boot(Java)应用程序中的控制器将所述文件作为MultipartFile(Service a)接收。我想从中获取输入流,并将其发送到另一个服务(服务B),而无需将所述流写入文件系统。服务B应该向服务A返回一些内容,服务A将所述响应发送给客户端,让我知道流媒体完成后它已经处理了所述文件。我不确定在SpringBoot应用程序中使用哪些库/类来实现这一点。我假设Java或SpringBoot有各种各样的助手类来实现这一点,我只是不确定哪些以及如何以正确的顺序将它们串在一起。

客户-

任何帮助都将不胜感激,因为当前将其写入文件系统的方法是一种可怕的方法,我希望尽快重构。

@Autowired
RestTemplate restTemplate

public customResponse myFileUpload(@RequestParam("foo") MultipartFile myFile) {
  //myFile comes in fine, I can pull input stream via myFile.getInputStream();
  //Should pull stream from myFile and return response from Service A here.
  //Not sure if I need to map the input to an outputStream or something?

  return restTemplate.postForObject(serviceA.url, ???, customResponse.class);
}

共有1个答案

姚兴安
2023-03-14

使用 Rest模板,您可以发送多部分表单数据请求。您可以在下面找到有关如何准备此类请求的代码片段。此外,RestTemplate还允许您上传资源,您可以通过调用多部分文件#getResource()从多部分文件中获取资源

public String myFileUpload(@RequestParam("foo") MultipartFile myFile) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);

    MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
    body.add("bar", myFile.getResource());

    HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);

    ResponseEntity<String> responseEntity = restTemplate.postForEntity(
        "http://localhost:8080/serviceB", // <-- put real endpoint here
        requestEntity,
        String.class
    );

    return responseEntity.getBody();
}
 类似资料:
  • 我想将文件上载到ftps服务器。下面的代码适用于10KB这样的小文件。但我需要上传5-10 MB的文件。错误出现在下面的错误行中。有人能帮我吗?下面是我尝试的代码。有没有更好的方法? 错误行 代码 错误消息 org.apache.commons.net.io.CopyStreamException: IOException在复制时捕获。在org.apache.commons.net.io.Util

  • 嘿,我是一个JAVA新手,我正在做一个项目,在这一点上我被困住了,我想做的是...我已经做了一个JTree列出了其中的一些项,现在我想获得一个JTree的选定项的文本,将它存储在一个字符串对象中,并将它传递给另一个类,在那里我可以对它做进一步的操作...这是我试过的 当我运行程序时,在getVal()中返回一个空值,而不是JTree项的文本,请帮助。

  • 我有一个巨大的文件,里面有大约100万条记录。我的要求是从文件中读取记录,并具有可配置数量的线程,这些线程跨多个线程处理记录。 目前,我正在使用单个线程读取该文件,并将其存储到一个集合中。 如何将集合元素按顺序传递给不同的线程进行进一步处理?

  • 我想将多部分文件从一个服务传递到另一个服务。 客户- 当我将文件从Service1传递到Service2时,显示了一个错误“500内部服务器错误,当前请求不是多部分请求” 客户- 我想知道可能是什么原因,我想我错过了一些头部分时传递的多部分文件作为参数。 服务2 服务2客户端 服务1

  • 问题内容: 我有一个txt文件,其中包含一个字符串,我希望能够在我的一个脚本中使用此字符串,所以我想知道是否有一种方法可以将文件内容设置为构建属性之一或可以在脚本中使用的参数,应该与使用构建环境属性之一相同。例如:$ {JOB_NAME},它保存着作业名称,因此,我想以相同的方式访问其中保存着某些值的文件的内容。可能吗? 问题答案: 您可以通过作业的 File 参数将文件从计算机上载到工作区。 您