如何在WSO2 EI 6.6中用Amazon S3 Connector批量获取指定子文件夹对象
Amazon S3 Connector 2.0.2 批量下载指定路径下所有CSV文件方案
核心思路
要批量下载S3存储桶aaa中bbb/路径下的所有CSV文件,需先通过listObjects操作获取该路径下的所有对象列表,再遍历列表逐个调用getObject完成下载。
修改后的代理配置
保留原有的AMAZON_S3_CONNECTION_1本地条目不变,替换AmazonConnectivity代理的inSequence部分如下:
<?xml version="1.0" encoding="UTF-8"?> <proxy name="AmazonConnectivity" startOnLoad="true" transports="http https" xmlns="http://ws.apache.org/ns/synapse"> <target> <inSequence> <log level="custom"> <property name="log" value="====开始批量下载S3文件===="/> </log> <!-- 1. 列出指定前缀下的所有对象 --> <amazons3.listObjects configKey="AMAZON_S3_CONNECTION_1"> <bucketName>aaa</bucketName> <prefix>bbb/</prefix> <delimiter>/</delimiter> <!-- 仅获取当前路径下的文件,不包含子文件夹 --> </amazons3.listObjects> <!-- 2. 遍历对象列表 --> <iterate expression="//ListObjectsResult/Contents" id="s3-file-iterator"> <target> <sequence> <!-- 提取当前对象的Key --> <property name="objectKey" expression="//Key/text()"/> <log level="custom"> <property name="正在下载文件" expression="$ctx:objectKey"/> </log> <!-- 3. 下载单个文件 --> <amazons3.getObject configKey="AMAZON_S3_CONNECTION_1"> <bucketName>aaa</bucketName> <objectKey>{$ctx:objectKey}</objectKey> </amazons3.getObject> <!-- 4. 将文件保存到本地目录 --> <property name="OUT_ONLY" value="true"/> <property name="transport.vfs.ReplyFileName" expression="fn:substring-after($ctx:objectKey, 'bbb/')"/> <send> <endpoint> <address uri="vfs:file:///C:/amazon-s3/downloads"/> </endpoint> </send> <log level="custom"> <property name="文件下载完成" expression="$ctx:objectKey"/> </log> </sequence> </target> </iterate> <log level="custom"> <property name="log" value="====批量下载任务触发完成===="/> </log> </inSequence> <outSequence/> <faultSequence> <log level="full"> <property name="log" value="====下载出错===="/> </log> </faultSequence> </target> <!-- 移除原VFS监听参数,因为当前是主动批量下载,而非监听本地文件触发 --> </proxy>
关键配置说明
- listObjects 操作:通过
prefix="bbb/"指定要遍历的路径,delimiter="/"确保只获取当前路径下的文件,不会递归子文件夹(如需递归可删除该参数)。 - Iterate 中介:遍历返回的对象列表节点
//ListObjectsResult/Contents,每个迭代处理一个文件。 - 文件保存:通过
transport.vfs.ReplyFileName提取文件名(去掉前缀bbb/),并通过VFS端点写入本地目录C:/amazon-s3/downloads。 - 权限要求:确保S3访问密钥拥有
s3:ListBucket(列出桶内对象)和s3:GetObject(下载对象)权限。
注意事项
- 如果目标路径下文件数量超过1000个,
listObjects会自动分页,Connector 2.0.2会处理分页逻辑,无需额外配置。 - 可根据需求调整本地保存路径、日志级别等参数。
内容的提问来源于stack exchange,提问作者aditi21
相关产品推荐
相关产品推荐

