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

如何在GCS中按文件扩展名筛选跨存储桶传输文件?

解决方案

要基于GCS Transfer Service实现按文件扩展名筛选传输,核心是利用glob匹配规则替换原有的时间筛选条件。GCS Transfer Service支持标准的glob模式,可直接匹配文件名后缀。

修改步骤与代码示例

假设你原代码中构建GcsTransferSpec的部分包含时间筛选逻辑,只需替换为以下扩展名匹配逻辑:

import com.google.cloud.storage.transfer.v1.TransferServiceClient;
import com.google.cloud.storage.transfer.v1.GcsTransferSpec;
import com.google.cloud.storage.transfer.v1.ObjectConditions;
import com.google.cloud.storage.transfer.v1.TransferJob;
import com.google.cloud.storage.transfer.v1.TransferJob.Status;

public class GcsTransferByExtension {
    public static void main(String[] args) throws Exception {
        // 初始化Transfer Service客户端
        try (TransferServiceClient client = TransferServiceClient.create()) {
            // 源存储桶配置
            GcsTransferSpec gcsTransferSpec = GcsTransferSpec.newBuilder()
                    .setSourceBucket("source-bucket-name")
                    .setSinkBucket("destination-bucket-name")
                    // 关键:设置扩展名匹配的glob规则
                    .setObjectConditions(ObjectConditions.newBuilder()
                            // 匹配.txt、.pdf、.mp3文件,支持brace扩展语法
                            .setMatchGlob("*.{txt,pdf,mp3}")
                            .build())
                    .build();

            // 构建传输任务
            TransferJob transferJob = TransferJob.newBuilder()
                    .setProjectId("your-project-id")
                    .setTransferSpec(gcsTransferSpec)
                    .setStatus(Status.ENABLED)
                    .build();

            // 创建传输任务
            TransferJob createdJob = client.createTransferJob(transferJob);
            System.out.println("Created transfer job: " + createdJob.getName());
        }
    }
}

关键说明

  • Glob模式写法:
    • 单个扩展名:*.txt 匹配所有后缀为.txt的文件
    • 多个扩展名:*.{txt,pdf,mp3} 同时匹配三种后缀的文件(GCS支持brace扩展语法)
    • 注意:glob匹配区分大小写,若需要忽略大小写,需单独指定如*.TXT、*.txt,或结合额外处理逻辑
  • 移除原时间筛选:确保删除原代码中类似setMinTimeElapsedSinceLastModification(Duration.newBuilder().setSeconds(30*24*3600).build())的时间条件代码
  • 权限验证:确保你的服务账号拥有roles/storage.transferAdmin权限,以及源桶的storage.objects.list和目标桶的storage.objects.create权限

内容的提问来源于stack exchange,提问作者Thor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:43:16