多部分 Returns 字节或 InputStream 不确定如何将其上传到 FTP 服务器

Multipart Returns Bytes or InputStream not sure how to upload it to FTP server

下面是我们拥有多部分对象的代码 - 它将包含字节或输入流

    Map<String, MultipartFile> multipartRequestParams = request.getFileMap();
    MultipartFile multipartFile = multipartRequestParams.get("file");
    multipartFile.getBytes() (or) multipartFile.getInputStream

如何为此定义网关并发送文件

     gateway.upload(multipartFile.getBytes(), multipartFile.getOriginalFilename(), remoteDirectory); 

        @MessagingGateway
    public interface UploadGateway {
        @Gateway(requestChannel = "toSftpChannel")
        void upload(@Payload byte[] file, @Header("filename") String filename, @Header("path") String path);
    }

    @Bean
    @ServiceActivator(inputChannel = "toSftpChannel")
    public MessageHandler toHandler() {
    ....
    ....
    }

我很困惑如何通过哪种机制将此文件发送到 SFTP 服务器?

multipartFile.getBytes() (or) multipartFile.getInputStream

事实并非如此。本例中的字节数组实际上是从 InputStream 中提取的。所以,根据你的描述,他们是同时出现的

您的其余代码没问题。将字节数组(或该文件 InputStream)作为 @Payload 并将其他有用数据作为 @Header.

是完全正确的

要将该数据传输到 SFTP,您应该使用 SftpMessageHandler,它支持 byte[]InputStream 作为来自 toSftpChannel 的请求消息的有效负载。在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/sftp.html#sftp-outbound.

filename header 可以从 SftpMessageHandlersetFileNameGenerator(FileNameGenerator fileNameGenerator) 选项中使用。您只需从为该 FileNameGenerator 合同提供的消息中获取此 header。

可以对 path header 执行类似的操作,从本质上讲,应该借用 setRemoteDirectoryExpressionString(String remoteDirectoryExpression) 选项,例如 setRemoteDirectoryExpressionString("headers.path").

所有这些信息都在提到的文档中。