簡體   English   中英

如何使用 AWS Java SDK for S3 查詢 AWS S3 存儲桶以匹配對象(文件)名稱

[英]how to query AWS S3 bucket for matching objects(files) names using AWS Java SDK for S3

我能夠在 S3 存儲桶中搜索包含 test123 的文件名。 我稍微修改了路徑的一些部分,因為這是以下代碼示例中的生產數據查詢。 我嘗試搜索 SDK V2 的 AWS 文檔,但沒有成功。 如果有任何方法可以使用類似於 AWS CLI 的 AWS 開發工具包來做到這一點,您能否分享一下? 如果任何人都可以分享對樣本的參考,那將會很有幫助。 謝謝

$ aws s3api list-objects --bucket <bucket-name> --query "Contents[?contains(Key, '1018441')]"

結果:

 {
        "LastModified": "2020-11-31T20:36:28.000Z",
        "ETag": "\"b861daa5cc3775f38519f5de6566cbe7\"",
        "StorageClass": "STANDARD",
        "Key": "clients/<client name>/programs/0ced4d20939fe16978df9e6d8f8985ad/test123-94343.pdf",
        "Owner": {
            "DisplayName": "owner",
            "ID": "123"
        },
        "Size": 27032
    }
import com.amazonaws.services.s3.model.*;

public List<S3ObjectSummary> execute(String key) {
    var keyLower = key.toLowerCase();
    var keys = new ArrayList<S3ObjectSummary>();
    ListObjectsV2Request request = new ListObjectsV2Request().withBucketName(bucketName);
    ListObjectsV2Result result;
    try {
        do {
            result = s3Client.listObjectsV2(request);
            result.getObjectSummaries()
                    .stream()
                    .filter(obj -> obj.getKey().toLowerCase().contains(keyLower))
                    .forEach(keys::add);
            var token = result.getContinuationToken();
            request.setContinuationToken(token);
        } while (result.isTruncated());
    } catch (AmazonS3Exception e) {
        LOG.error(e.getAdditionalDetails().entrySet().toString());
        throw e;
    }
    return keys;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM