我有一个使用ftp入站通道适配器获取文件的应用程序。我一直无法使用acceptoncefilefilter。因此,我可以根据自己的存储数据检查文件。数据是文件的sha密钥。
我的问题是我使用的customfilefilter只获取FTPFile,而不是实际文件。因此,我无法为其生成SHA密钥。
这是相关配置
<int-ftp:inbound-channel-adapter id="ftpInbound"
channel="ftpChannel"
session-factory="ftpClientFactory"
charset="UTF-8"
local-directory="c:\DMSRoot"
temporary-file-suffix=".writing"
remote-directory="DMS"
preserve-timestamp="true"
auto-startup="true"
filter="compositeFilterRemote">
<int:poller fixed-delay="5000" error-channel="errorChannel"/>
</int-ftp:inbound-channel-adapter>
<int-ftp:outbound-channel-adapter id="ftpOutbound"
channel="ftpChannel"
session-factory="ftpClientFactory"
charset="UTF-8"
remote-file-separator="/"
auto-create-directory="true"
remote-directory="DMS"
use-temporary-file-name="true"
temporary-file-suffix=".writing">
<int-ftp:request-handler-advice-chain>
<bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
<property name="onSuccessExpression" value="new File(payload).delete()" />
<property name="onFailureExpression" value="new File(payload).delete()" />
</bean>
</int-ftp:request-handler-advice-chain>
</int-ftp:outbound-channel-adapter>
<bean id="compositeFilterRemote" class="org.springframework.integration.file.filters.CompositeFileListFilter">
<constructor-arg>
<list>
<!-- Ensures that the file is whole before processing it -->
<bean class="org.springframework.integration.file.filters.AcceptAllFileListFilter" />
<bean class="com.polling.util.CustomFileFilterRemote"/>
<!-- Ensures files are picked up only once from the directory -->
</list>
</constructor-arg>
</bean>
public class CustomFileFilterRemote implements FileListFilter<FTPFile>
{
@Override
public List<FTPFile> filterFiles(FTPFile[] files)
{
请告诉我如何才能做到这一点?
答案 0 :(得分:1)
你必须首先获取文件来计算sha - 有两个过滤器 - 一个用来决定我们是否应该获取文件(我们只是接收文件元数据 - 比如来自ls)。获取文件后,将对文件系统文件使用第二个过滤器(local-filter
)。