从存储桶S3获取特定文件

时间:2019-08-25 12:45:56

标签: java amazon-s3 bucket

我有一个存储大量数据的存储桶,我只想获取包含字符串(UUID是文件的一部分)的特定对象(文件)。

现在我正在做的是列出s3中的所有对象,然后通过获取仅包含特定字符串的摘要来过滤它们,然后将所有对象收集在一个列表中,并返回包含所需文件的列表。

public List<String>getBucketList(String filterStr) {

        List<String>lst = new ArrayList<>();
        try {
            ListObjectsRequest listObjectsRequest =
                    new ListObjectsRequest()
                            .withBucketName(bucketName);
            ObjectListing objects = s3client.listObjects(listObjectsRequest);
            for (;;) {
                List<S3ObjectSummary> summaries = objects.getObjectSummaries();
                if (summaries.size() < 1) {
                    break;
                }
                for(S3ObjectSummary summary: summaries){
                    if(summary.getKey().contains(filterStr)){
                        lst.add(summary.getKey());
                    }
                }
                objects = s3client.listNextBatchOfObjects(objects);
            }
}

预期:从清单中我只想获取与我相关的对象,其中包含'filterStr'(变量名,其值为UUID号)。 实际:获取所有对象后,我通过验证所需的文件(对象)是否包含字符串(变量名filterStr)来对其进行过滤 该操作最终完成了我打算做的事情,但是要花很多时间,我想知道是否可以将其最小化。

编辑: 在我的存储桶中,我有多个文件夹,例如:

alert
alert_archived
channel
device

在每个文件夹中,我都有一个以这种方式表示的日期:

警报    2019年      08       26

我要获取的文件的示例以以下约定表示:

s3://<bucket_name>/<name_of_folder_out_of_many>/2019/08/25/<UUID>_<name_of_the_file>.csv.gz

我想遍历存储桶中的所有文件夹并仅获取具有此特定UUID_.csv.gz的文件,当然,当前日期很重要,我想仅获取当前日期。

0 个答案:

没有答案