我正在尝试解压缩可能是任何名称的zip文件。下面是我的代码:-
<proxy name="Unzip" startOnLoad="true" transports="http https" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<fileconnector.unzip>
<source>file:///D:/AfterProcess/.*\.zip</source>
<destination>file:///D:/001/</destination>
</fileconnector.unzip>
<respond></respond>
</inSequence>
<outSequence/>
<faultSequence/>
</target>
但是它无法解压缩。如果尝试通过提供如下文件名进行尝试:-
<source>file:///D:/AfterProcess/Hello.zip</source>
然后它正在工作。如果我不知道文件名,该如何解压缩文件?
答案 0 :(得分:1)
解压缩时,不能在源代码中使用正则表达式。如果可以,那么如果有多个匹配的文件怎么办?
如果您知道该zip文件始终位于该目录中,则可以使用文件连接器搜索来查找文件名。
<fileconnector.search>
<source>file:///D:/AfterProcess/</source>
<filePattern>.*\.zip</filePattern>
<recursiveSearch>False</recursiveSearch>
</fileconnector.search>
如果它是目录中唯一的zip文件,搜索将返回以下内容。
<fc:result xmlns:fc="http://org.wso2.esbconnectors.FileConnector">
<fc:file>/AfterProcess/Hello.zip</fc:file>
</fc:result>
您可以从此处将路径输入解压缩功能。您需要在搜索结果前加上file:///D:
前缀,以使其再次成为绝对路径。
<fileconnector.unzip>
<source xmlns:fc="http://org.wso2.esbconnectors.FileConnector">{fn:concat('file:///D:', //fc:result/fc:file/text())}</source>
<destination>file:///D:/001/</destination>
</fileconnector.unzip>