我试图从S3获取文件。
像往常一样,我的文件在桶中组织如下:
bucket/<prefixes>/files
我想检索具有特定文件名的文件
例如:
对于第一种情况,我可以使用前缀,如下所示:
ObjectListing objectListing = s3Client.listObjects(bucketName, "test/myfile");
但对于其他两个案例,我找不到任何解决方案。
我尝试使用以下通配符:
ObjectListing objectListing = s3Client.listObjects(bucketName, "test/*.csv");
但它没有返回任何结果。
是否有解决方法(除了获取密钥列表并在我的代码中进行过滤)?
感谢任何帮助。
答案 0 :(得分:1)
你不能这样做,S3中没有通配符,文件甚至可以包含*字符
答案 1 :(得分:1)
您的用例很常见。
我不知道任何S3 API允许你做除前缀匹配以外的任何事情。
处理这个问题的方法是维护一个单独的,可搜索的文件名副本(可能还有其他元数据)。换句话说,在每个文件的关系数据库的表中都有一行。或者你可以保持一个&#34;索引&#34;列出所有文件名的文件。
如果通过您的代码执行文件创建/删除,您可以添加所需的代码以使文件列表与您的存储桶保持同步。如果没有,那么您可以使用S3 event notifications来驱动文件列表更新。
如果要按文件名搜索,请查看文件列表或数据库表以获取匹配的文件名。然后点击S3进行所需的操作。