使用;Mule请求者“;FTP失去了原始文件名

使用;Mule请求者“;FTP失去了原始文件名,ftp,mule,esb,Ftp,Mule,Esb,我正在处理一个流,当HTTP请求触发时,该流将从FTP服务器下载文件。为了在请求时执行此操作,而不是在轮询时,我使用Mule请求程序 我发现,如果没有请求者,FTP连接器将为每个文件的inboundProperties集合设置“incomingFilename”。当与Mule请求程序一起使用时,不会设置filename属性,因此我不知道我正在处理什么文件。。。或者在这种情况下保存到文件系统。在下面的代码中,我使用'counter'变量作为文件名,以防文件名无法通过 你知道如何解决这个问题吗?以下

我正在处理一个流,当HTTP请求触发时,该流将从FTP服务器下载文件。为了在请求时执行此操作,而不是在轮询时,我使用Mule请求程序

我发现,如果没有请求者,FTP连接器将为每个文件的inboundProperties集合设置“incomingFilename”。当与Mule请求程序一起使用时,不会设置filename属性,因此我不知道我正在处理什么文件。。。或者在这种情况下保存到文件系统。在下面的代码中,我使用'counter'变量作为文件名,以防文件名无法通过

你知道如何解决这个问题吗?以下是流程图:

<ftp:connector name="FTPConfig" pollingFrequency="3000" validateConnections="true" doc:name="FTP"></ftp:connector>


<flow name="FileRequestFlow"> 
        <http:listener config-ref="HTTP_Listener_Configuration" path="csvfilesready" allowedMethods="GET" doc:name="HTTP"></http:listener>  
        <mulerequester:request-collection config-ref="Mule_Requester" resource="ftp://username:pswd@127.0.0.1:21/Incoming?connector=FTPConfig" doc:name="Mule Requester"></mulerequester:request-collection>
                <foreach collection="#[payload]" doc:name="For Each">
        <set-variable variableName="thefilename" value="#[message.inboundProperties.originalFilename==null ? counter.toString()+'.csv' : message.inboundProperties.originalFilename] " doc:name="Variable"/> 
        <file:outbound-endpoint path="/IncomingComplete" outputPattern="#[flowVars.thefilename]" responseTimeout="10000" doc:name="File"></file:outbound-endpoint>
        <logger message="#['File saved as:  ' + payload]" level="INFO" doc:name="Logger"></logger>  
    </foreach>

        <logger message="#[payload]" level="INFO" doc:name="Logger"></logger>  
    </flow>

更新: 下面是与请求者一起工作的选项,但是,您可以使用请求集合。关键是要认识到它将返回一个MuleMessageCollection,并在请求者之后直接使用集合拆分器,然后请求者将单独返回带有原始文件名的ftp文件消息


在玩了一段时间之后,我发现在mule请求程序中使用FTP时,只有将文件名用作请求,而不是请求集合,才能获取文件名

如果需要关联的文件名,则无法使请求集合正常工作

所以。。。。如果需要多个文件,则需要对请求程序执行类似于循环的操作,直到有效负载为空


如果您有其他方法,请告诉我。

我已经编写了一个备用ftp连接器,它允许在流中发出list命令,然后循环读取文件

见: