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

如何在spring boot中将多部分文件从一个服务传递到另一个服务?

严繁
2023-03-14

我想将多部分文件从一个服务传递到另一个服务。

客户-

当我将文件从Service1传递到Service2时,显示了一个错误“500内部服务器错误,当前请求不是多部分请求”

客户-

我想知道可能是什么原因,我想我错过了一些头部分时传递的多部分文件作为参数。

服务2

@PostMapping(path="/upload")
public ResponseEntity<Properties> upload(@RequestParam("file") MultipartFile multiPart) {
    return saveFile(multiPart);
}

服务2客户端

@FeignClient
(name="${feign.upload.serverId}", configuration = UploadServiceClientConfiguration.class, decode404 = true)
public interface UploadServiceClient {

    @PostMapping(path="/upload")
    ResponseEntity<Properties> upload(@RequestParam("file") MultipartFile multiPart);

    class UploadServiceClientConfiguration {
        @Value(value="${feign.upload.user}")
        String user;
        @Value(value="${feign.upload.password}")
        String password;
        @Bean
        public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
            return new BasicAuthRequestInterceptor(user, password);
        }
    }
}

服务1

@Autowired
UploadServiceClient uploadSvcClient;
@PostMapping(path="/upload")
public ResponseEntity<Properties> uploadAttachment(@RequestParam("file") MultipartFile file) {
    return uploadSvcClient.upload(file);
}

共有2个答案

郭浩穰
2023-03-14

也许您需要一个标头来指示您的请求是多部分的。这个答案能解决你的问题吗?需要的是标头注释:

@PostMapping(path="/upload")
@Headers("Content-Type: multipart/form-data")
ResponseEntity<Properties> upload(@Param("file") MultipartFile multiPart);

这只是一个假设。请试一试,让我知道结果。

左丘子平
2023-03-14

最后使用post File upload spring cloud虚拟客户端解决了与另一个服务的通信问题

我已经改变了FaignClient参数类型从

@RequestParam(“文件”)多部分文件mFile

@recestPart("file")MultiValueMap文件。

假装客户签名

@PostMapping(value="/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
        ResponseEntity<Properties> upload(@RequestHeader(name=UID,required=false) String uid, @RequestPart("file") MultiValueMap<String, Object> file);

服务1实现

@PostMapping(path="/upload")
    public ResponseEntity<Properties> uploadAttachment(@RequestHeader(IRSConsts.UID) String uid, @RequestParam("file") MultipartFile mFile) {
        MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
        ByteArrayResource contentsAsResource = null;
        try {
            contentsAsResource = new ByteArrayResource(mFile.getBytes()) {
                @Override
                public String getFilename() {
                    return mFile.getOriginalFilename();
                }
            };
        } catch (IOException e) {
            e.printStackTrace();
        }
        multiValueMap.add("file", contentsAsResource);
        return transSvcClient.upload(uid, multiValueMap);
    }

服务2实现

@PostMapping(path = "/upload")
    @Headers("Content-Type: multipart/form-data")
    public ResponseEntity<Properties> upload(@RequestHeader(name = UID, required = false) String uid,
            @RequestPart("file") MultipartFile multiPart) {
        //Save Attachment.
    }
 类似资料:
  • 我有两个endpointapi,它们是/uploadand/redirect 我不知道为什么会发生这种情况。谢谢你的帮助。

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

  • 我正在使用spring boot/Angular 6应用程序,我想将文件上载到服务器,我按照本教程上载了一个多部分文件:https://grokonez.com/spring-framework/spring-boot/angular-5-upload-get-multipartfile-to-from-spring-boot-server“。文件上载在应用程序的文件夹中,但现在我想使用URL将文

  • 本文向大家介绍用php将文件上传到另一个php服务器,包括了用php将文件上传到另一个php服务器的使用技巧和注意事项,需要的朋友参考一下 fopen,fread和fwrite函数可用于打开文件流,读取数据流并将该数据分别写入文件。 文件资源不一定需要指向本地计算机本身上的某个位置。 以下是将文件从本地服务器传输到ftp服务器的示例- 该图像需要传输到FTP服务器。因此,服务器以写模式打开,并且图

  • 问题内容: 我有两个 newAccessLevels.java ,它有两个按钮“ Level 1”,“ Level 2”和 newAccessPanel.java。 我需要获取用户选择“ 1或2”的级别,以便可以在标题中显示它。 accessPanel.java, 例如访问级别1,访问级别2。如何完成此操作。下面是示例代码,因此,如果单击级别1,则将打开标题为* ACCESS LEVEL 1 的n