mule从s3 bucket下载所有文件

mule从s3 bucket下载所有文件,mule,mule-studio,mule-el,Mule,Mule Studio,Mule El,我有一个名为demo的bucket。 在那个桶里我有3个pdf文件。我想下载所有文件并将其放在c:\output文件夹中 我点击我的网址像 但我得到了一个错误: 找不到将CollectionDataType{type=org.mule.module.s3.simpleapi.SimpleMapzons3amazondevkitImpl$S3ObjectSummaryIterable,itemType=com.amazonaws.services.s3.model.S3ObjectSummary,

我有一个名为demo的bucket。 在那个桶里我有3个pdf文件。我想下载所有文件并将其放在c:\output文件夹中

我点击我的网址像

但我得到了一个错误:

找不到将CollectionDataType{type=org.mule.module.s3.simpleapi.SimpleMapzons3amazondevkitImpl$S3ObjectSummaryIterable,itemType=com.amazonaws.services.s3.model.S3ObjectSummary,mimeType='/'}转换为SimpleDataType{type=org.mule.api.transport.OutputHandler,mimeType='/'}的转换器。org.mule.api.transformer.TransformerException org.mule.api.transformer.TransformerException。消息负载的类型为:SimpleMapsonS3amazondevkitImpl$S3ObjectSummaryIterable


发生此错误的原因是,在foreach处理器之后,负载是S3类的实例,并且您没有指定任何要返回的内容类型。因此Mule尝试将S3实例转换为默认的SimpleDataType,但失败了。 解决这个问题的一种方法是简单地添加如下内容

<flow name="listobjects">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="listobjects" contentType="text/plain" doc:name="HTTP"/>
    <s3:list-objects config-ref="Amazon_S3" bucketName="demo"  doc:name="Amazon S3" maxKeys="5" />

   <!--  <payload-type-filter expectedType="java.util.List" doc:name="Payload"/> -->
    <foreach collection="#[payload]" doc:name="For Each">
   <!-- <foreach doc:name="For Each file"> -->
     <logger message=" inside foreach...... #[payload.getKey()]  ...." level="INFO" doc:name="Logger" />
        <s3:get-object-content config-ref="Amazon_S3" bucketName="demo" key="#[payload.getKey()]"  doc:name="Amazon S3"/>
        <object-to-byte-array-transformer/>
      <file:outbound-endpoint path="C:\output" responseTimeout="10000" doc:name="File" outputPattern="#[payload.getKey()] "></file:outbound-endpoint> 
    </foreach>
</flow>
我运行此程序时没有遇到任何问题:

  <file:outbound-endpoint path="C:\output" responseTimeout="10000" doc:name="File" outputPattern="#[payload.getKey()] "></file:outbound-endpoint> 
<object-to-byte-array-transformer/>
  <file:outbound-endpoint path="C:\output" responseTimeout="10000" doc:name="File" outputPattern="#[payload.getKey()] "></file:outbound-endpoint> 
<flow name="listobjects">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8083" path="listobjects" contentType="text/plain" doc:name="HTTP"/>
    <s3:list-objects config-ref="Amazon_S3" bucketName="mule_test"  doc:name="Amazon S3" maxKeys="5" />
    <foreach collection="#[payload]" doc:name="For Each">
     <logger message=" inside foreach...... #[payload.getKey()]  ...." level="INFO" doc:name="Logger" />
        <set-variable variableName="fileKey" value="#[payload.getKey()]" doc:name="Variable" />
        <s3:get-object-content config-ref="Amazon_S3" bucketName="#[payload.getBucketName()]" key="#[payload.getKey()]"  doc:name="Amazon S3"/>
        <object-to-byte-array-transformer/>
      <file:outbound-endpoint path="/tmp" responseTimeout="10000" doc:name="File" outputPattern="#[flowVars.fileKey] "></file:outbound-endpoint> 
    </foreach>
    <set-property propertyName="Content-Type" value="application/json" doc:name="Content-Type" />
    <set-payload value="{'result': 'ok'}"/>
</flow>