如何使用AWS Java SDK for S3查询AWS S3 bucket中匹配的对象(文件)名称

如何使用AWS Java SDK for S3查询AWS S3 bucket中匹配的对象(文件)名称,java,amazon-s3,aws-sdk,Java,Amazon S3,Aws Sdk,我能够在S3存储桶中搜索包含test123的文件名。我稍微修改了一些路径,因为这是下面代码示例中的生产数据查询。我试图在AWS文档中搜索SDK V2,但没有成功。如果有任何方法可以使用类似于AWS CLI的AWS SDK实现此目的,请与我们分享?如果任何人都能分享对样本的引用,这将是很有帮助的。谢谢 $ aws s3api list-objects --bucket <bucket-name> --query "Contents[?contains(Key, '101844

我能够在S3存储桶中搜索包含test123的文件名。我稍微修改了一些路径,因为这是下面代码示例中的生产数据查询。我试图在AWS文档中搜索SDK V2,但没有成功。如果有任何方法可以使用类似于AWS CLI的AWS SDK实现此目的,请与我们分享?如果任何人都能分享对样本的引用,这将是很有帮助的。谢谢

$ aws s3api list-objects --bucket <bucket-name> --query "Contents[?contains(Key, '1018441')]"
$aws s3api列出对象——bucket——查询“内容[?包含(键,'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
    }
{
“LastModified”:“2020-11-31T20:36:28.000Z”,
“ETag”:“b861daa5cc3775f38519f5de6566cbe7”,
“StorageClass”:“标准”,
“密钥”:“客户端//程序/0ced4d20939fe16978df9e6d8f8985ad/test123-94343.pdf”,
“所有者”:{
“DisplayName”:“所有者”,
“ID”:“123”
},
“尺寸”:27032
}
导入com.amazonaws.services.s3.model.*;
公共列表执行(字符串键){
var keyLower=key.toLowerCase();
var keys=new ArrayList();
ListObjectsV2Request请求=新的ListObjectsV2Request(),带有bucketName(bucketName);
ListObjectsV2Result结果;
试一试{
做{
结果=s3Client.listObjectsV2(请求);
result.getObjectSummaries()
.stream()
.filter(obj->obj.getKey().toLowerCase().contains(keyLower))
.forEach(键::添加);
var token=result.getContinuationToken();
request.setContinuationToken(令牌);
}while(result.isTruncated());
}捕获(AmazonS3E例外){
LOG.error(例如getAdditionalDetails().entrySet().toString());
投掷e;
}
返回键;

谢谢@niclaslindgren的回答。这太好了。您认为使用AWS SDK V2(最新版本)也可以做到这一点吗?@标记它们在v1和V2中的工作方式应该相同(参见此处以获取参考)
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;