如何为SFTP使用mule请求程序-动态文件名和路径

如何为SFTP使用mule请求程序-动态文件名和路径,mule,mule-studio,Mule,Mule Studio,我正在尝试为SFTP使用mule请求程序组件。如何将文件名作为请求参数的一部分?这是我的流程: <flow name="Move_Doc_To_Temp_Location" doc:name="Move_Doc_To_Temp_Location"> <jdbc-ee:inbound-endpoint queryKey="Select_Document" queryTimeout="-1" pollingFrequency="30000" connector-ref="L

我正在尝试为SFTP使用mule请求程序组件。如何将文件名作为请求参数的一部分?这是我的流程:

<flow name="Move_Doc_To_Temp_Location" doc:name="Move_Doc_To_Temp_Location">
    <jdbc-ee:inbound-endpoint queryKey="Select_Document" queryTimeout="-1" pollingFrequency="30000" connector-ref="LoanApp_Database" doc:name="Select_Doc_To_be_moved"/>
    <set-variable variableName="OriginalPayload" value="#[payload]" doc:name="OriginalPayload"/>
    <logger message="#[payload['DocID']] - #[payload['Location']]" level="INFO" category="Document to be moved" doc:name="Logger"/>
           <!--  <mulerequester:request config-ref="Mule_Requester" resource="file:///#[payload['Location']]" doc:name="Mule Requester"/> -->
    <mulerequester:request config-ref="Mule_Requester" resource="sftp://user:Pwd@Hostname#[payload['Location']]" doc:name="Mule Requester"/>  
    <file:outbound-endpoint path="C:\Users\jvas\Desktop\testfiles" outputPattern="#[header:originalFilename]" responseTimeout="10000" doc:name="File"/>        
</flow>
从位于的主机上的绝对路径/dir/path检索file.txt host.example.com使用用户名user的SFTP

    sftp://user@host.example.com/dir/path/file.txt

Mule SFTP连接器无法获取地址中的文件名。相反,您需要使用文件名过滤器。然而,不幸的是,我认为请求者模块忽略了在端点上配置的过滤器,如下所述:

但是,您可以使用脚本通过sftp中间流读取文件。比如:

<scripting:transformer>
            <scripting:script engine="Groovy">
                <scripting:text>
                    def endpointBuilder = muleContext.endpointFactory.getEndpointBuilder( 
                    "sftp://${sftp.username}@${sftp.host}:${sftp.port}/${sftp.path}?identityFile=${app.home}/${sftp.keyPath}&amp;passphrase=${sftp.passphrase}&amp;connector=sftp-csv") 
                    endpointBuilder.addMessageProcessor(new org.mule.routing.MessageFilter(new org.mule.transport.file.filters.FilenameWildcardFilter(sessionVars.expectedFilename))) 
                    def inboundEndpoint = endpointBuilder.buildInboundEndpoint() 
                    inboundEndpoint.request(30000L) 
                </scripting:text>
            </scripting:script>
        </scripting:transformer>

def endpointBuilder=muleContext.endpointFactory.getEndpointBuilder(
“sftp://${sftp.username}@${sftp.host}:${sftp.port}/${sftp.path}?identityFile=${app.home}/${sftp.keyPath}&;passphrase=${sftp.passphrase}&;connector=sftp csv”)
endpointBuilder.addMessageProcessor(new org.mule.routing.MessageFilter(new org.mule.transport.file.filters.FilenameWildcardFilter(sessionVars.expectedFilename)))
def inboundEndpoint=endpointBuilder.buildInboundEndpoint()
inboundEndpoint.request(30000L)

只有一个问题,30000L代表什么?这是超时设置吗?太好了:)那么接受答案吗?因为它正在请求一个文件,它将等待30000毫秒来检索它。您可以将其更改为您想要的任何内容。因为它请求一个文件,它将等待30000毫秒才能检索它。您可以将其更改为您想要的任何内容。我只是注意到它不会像mule组件那样处理异常。对于eg;如果文件不在那里,它将返回空负载。有办法解决这个问题吗?您知道如何获取实际的SFTP错误消息吗?(例如,如果目录不可访问等)身份文件和密码短语是什么?它是用来干什么的。我猜密码就是密码。那么,身份文件的用途是什么呢?要验证远程服务器?但是,你怎么能指出一些相同的资源呢。
<scripting:transformer>
            <scripting:script engine="Groovy">
                <scripting:text>
                    def endpointBuilder = muleContext.endpointFactory.getEndpointBuilder( 
                    "sftp://${sftp.username}@${sftp.host}:${sftp.port}/${sftp.path}?identityFile=${app.home}/${sftp.keyPath}&amp;passphrase=${sftp.passphrase}&amp;connector=sftp-csv") 
                    endpointBuilder.addMessageProcessor(new org.mule.routing.MessageFilter(new org.mule.transport.file.filters.FilenameWildcardFilter(sessionVars.expectedFilename))) 
                    def inboundEndpoint = endpointBuilder.buildInboundEndpoint() 
                    inboundEndpoint.request(30000L) 
                </scripting:text>
            </scripting:script>
        </scripting:transformer>