Mule ESB:如何获取Amazon S3 Bucket中的文件夹中的所有文件(获取对象内容)

时间:2014-09-21 06:19:10

标签: amazon-s3 mule mule-studio mule-component

我正在使用Amazon S3,我的存储桶在输入文件夹中有多个文件。我需要获取文件夹中的所有文件并对其进行处理,现在我可以通过提供一个文件来处理它核心价值。但不确定如何一次性获取存储桶中的所有文件(输入是我的文件夹中的文件夹名称)。请在下面找到我的配置

 <s3:config name="Amazon_S3" accessKey="myKey" secretKey="MySecretkey" doc:name="Amazon S3"/>
<flow name="s3Flow1" doc:name="s3Flow1">
    <http:inbound-endpoint exchange-pattern="one-way" host="localhost" port="8081" doc:name="HTTP"/>
   <logger message="*********Inside yes************" level="INFO" doc:name="Logger"/> 
    <s3:list-objects config-ref="Amazon_S3" bucketName="getfiles"  doc:name="Amazon S3" maxKeys="5" delimiter="/" prefix="input/"/>
    <json:object-to-json-transformer doc:name="Object to JSON"/>
    <logger message="..InsidePay..#[payload]********" level="INFO" doc:name="Logger"/>
    <s3:get-object-content config-ref="Amazon_S3" bucketName="my_backetName" key="input/test.xml"  doc:name="Amazon S3"/>
    <file:outbound-endpoint path="C:\OUT" responseTimeout="10000" doc:name="File" outputPattern="#[function:dateStamp].xml"/>
</flow>

当它尝试在Key = input / *中添加更多文件名或*值时。这是投掷错误。请帮我解决这个问题。 提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要获取每个文件的对象内容。为此,您可以使用foreach路由器并使用#[payload.getKey()]获取当前对象的密钥:

<s3:list-objects config-ref="Amazon_S3" bucketName="getfiles"  doc:name="Amazon S3" maxKeys="5" delimiter="/" prefix="input/"/>

<foreach doc:name="For Each file">
 <s3:get-object-content config-ref="Amazon_S3" bucketName="my_backetName" key="#[payload.getKey()]"  doc:name="Amazon S3"/>
</foreach>