3

如何从 byte[] 在远程目录中创建文件,因为 PollableChannel 中有 send() 方法。从下面的代码能够将文件发送到远程,但它正在本地机器上创建一个文件。如何避免在本地机器上创建文件?

PollableChannel remoteFileChannel = context.getBean("outputChannel", PollableChannel.class); 

Message<byte[]> sendFile = MessageBuilder.withPayload("hi how are you".getBytes()).build();

remoteFileChannel.send(sendFile);

弹簧 sftp 配置:

<bean id="sftpSessionFactory"
        class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory"
        p:host="${sftp.host}"
        p:port="${sftp.port}"
        p:user="${sftp.username}"
        p:password="${sftp.password}"
        p:allowUnknownKeys="${sftp.allowUnknownKeys}" />

<int:channel id="outputChannel">
        <int:queue />
</int:channel>

<int-sftp:outbound-channel-adapter id="outboundAdapter"
        session-factory="sftpSessionFactory"
        channel="outputChannel"
        charset="UTF-8"
        remote-directory="${sftp.remotedir}"
        remote-filename-generator="randomFileNameGenerator" /> 

如何创建具有随机名称的文件并将字节写入其中?

我尝试过使用自定义文件名生成器类:

@Component("randomFileNameGenerator")
public class RandomFileNameGenerator implements FileNameGenerator {

    @Override
    public String generateFileName(Message<?> msg) {
        long number = (long) Math.floor(Math.random() * 90000000L) + 1000000L;
        String fileName = String.format("%d.txt", number);
        return fileName;
    }

}

在未设置文件名的地方,创建名称类似于“adas-asdfsadf-545sadf.msg”的文件。谁能指出我哪里做错了

4

1 回答 1

1

首先,您没有显示您的 Spring Integration 配置。

另一方面,如果看起来代码是您的,则不清楚您为什么说“它正在创建文件”。所以,就是你创建一个文件。

有开箱即用的组件,例如<int-sftp:outbound-channel-adapter><int-sftp:outbound-gateway>,它们绝对可以解决您的目标。

它们都基于RemoteFileTemplate.send()处理byte[] payload得很好的操作。

在参考手册示例中查看更多信息。

更新

如何创建具有随机名称的文件并将字节写入其中?

对我来说,我们刚刚解决了这个byte[]问题。

回覆。“随机名称”。看起来你走对了:remote-filename-generator="fileNameGenerator"正是为了那个任务。请参阅FileNameGenerator框架中的策略及其实现。您可以在自定义实现中使用您的 randomize 函数,并从该通道适配器定义中引用它。

于 2016-03-14T13:34:12.423 回答