【问题标题】:Multipart Returns Bytes or InputStream not sure how to upload it to FTP serverMultipart Returns Bytes 或 InputStream 不确定如何将其上传到 FTP 服务器
【发布时间】:2021-07-20 04:16:21
【问题描述】:

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

    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 服务器?

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    multipartFile.getBytes()(或)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 标头可以从 SftpMessageHandlersetFileNameGenerator(FileNameGenerator fileNameGenerator) 选项中使用。您只需从为该 FileNameGenerator 合同提供的消息中获取此标头。

    path 标头也可以这样做,本质上,它应该借用setRemoteDirectoryExpressionString(String remoteDirectoryExpression) 选项,例如setRemoteDirectoryExpressionString("headers.path")

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

    【讨论】:

    • 非常感谢,但能否请您给我看一些不涉及 XML 的代码,即带注释的代码。我正在寻找 java 代码而不是 xml 文件。你能分享我一个代码sn-p或链接吗
    • 我在答案中分享的文档有一个Java配置部分:docs.spring.io/spring-integration/docs/current/reference/html/…
    • 我唯一的问题是如何传递字节 [] 或输入流。我需要在出站网关中明确使用 put 命令吗?消息处理程序不处理混淆的流或字节
    • 我不确定你在说什么。 SftpMessageHandler 的文档从描述您发送到该处理程序端点的输入通道的消息中支持的有效负载类型开始。详细查看该 Java 示例:docs.spring.io/spring-integration/docs/current/reference/html/…。它在网关参数中发送File 作为有效负载,但它可以是byte[]InputStream
    • 我看到上面的链接发送了一个文件对象参数。我们可以发送任何参数,例如 byte[] 或 InputStream,而不是文件,例如 void sendToSftp(InputStream fileInputStream);或 void sendToSftp(byte[] fileBytes);。我不确定默认情况下会采用什么参数,因为我没有看到消息处理程序的方法签名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2014-10-17
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    相关资源
    最近更新 更多