AWS S3获取包含文本的密钥

时间:2017-07-21 14:20:05

标签: java amazon-web-services amazon-s3 aws-java-sdk

我试图从S3获取文件。

像往常一样,我的文件在桶中组织如下:

bucket/<prefixes>/files

我想检索具有特定文件名的文件

例如:

  1. 以给定文本开头的文件(myfile - *)
  2. 具有特定扩展名的文件(* .csv)
  3. 具有特定文字的文件名(文字
  4. 对于第一种情况,我可以使用前缀,如下所示:

    ObjectListing objectListing = s3Client.listObjects(bucketName, "test/myfile");
    

    但对于其他两个案例,我找不到任何解决方案。

    我尝试使用以下通配符:

    ObjectListing objectListing = s3Client.listObjects(bucketName, "test/*.csv");
    

    但它没有返回任何结果。

    是否有解决方法(除了获取密钥列表并在我的代码中进行过滤)?

    感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你不能这样做,S3中没有通配符,文件甚至可以包含*字符

答案 1 :(得分:1)

您的用例很常见。

我不知道任何S3 API允许你做除前缀匹配以外的任何事情。

处理这个问题的方法是维护一个单独的,可搜索的文件名副本(可能还有其他元数据)。换句话说,在每个文件的关系数据库的表中都有一行。或者你可以保持一个&#34;索引&#34;列出所有文件名的文件。

如果通过您的代码执行文件创建/删除,您可以添加所需的代码以使文件列表与您的存储桶保持同步。如果没有,那么您可以使用S3 event notifications来驱动文件列表更新。

如果要按文件名搜索,请查看文件列表或数据库表以获取匹配的文件名。然后点击S3进行所需的操作。