You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:01:06