如何为SFTP使用mule请求程序-动态文件名和路径
我正在尝试为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
<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}&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)
</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}&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)
</scripting:text>
</scripting:script>
</scripting:transformer>