如何使用Amazon S3 listObjects过滤.mp3文件

时间:2015-06-19 20:39:47

标签: javascript node.js amazon-web-services amazon-s3

我正在使用带有node.js的Amazon S3服务,我想使用Amazon S3 prefix过滤目录中的所有.mp3文件。有一个sufix参数,但没有var prefix = "myS3dir/"; bucket.listObjects({Prefix:prefix}, function(err, data){ //do something with data }); 。有没有办法使用正则表达式或像* .mp3之类的过滤器?

这是函数参考http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listObjects-property

{{1}}

2 个答案:

答案 0 :(得分:2)

没了。这对S3来说是不可能的。你只能通过前缀服务器端过滤。这与S3没有真正的密钥层次结构这一事实有关,它主要是一个key->对象存储,并且前缀匹配在那里工作。
如果你想做后缀匹配,你基本上必须拔出所有键的名称并检查它们的客户端。

答案 1 :(得分:1)

如果您需要通过.mp3文件扩展名查询并且S3对象的数量很小,那么只需枚举所有S3对象并提供您自己的内存中过滤器/查询。如果S3对象的数量巨大(如10k +,枚举速度慢),那么您需要一个不同的解决方案。假设您没有直接向最终用户公开S3结构,那么这里有一些想法:

    例如,
  1. 在文件名前面插入前缀 mybucket / mp3 / beatit.mp3 - 然后你可以使用前缀:mybucket / mp3 /。注意:如果您还想查询" beat *",这是不好的。
  2. 反转文件名,例如3 pm.titaeb,并搜索前缀mybucket / 3pm。我知道这听起来 很奇怪,它会阻止查询" beat *"但在某些情况下,这是一个很好的解决方案。
  3. 使用在文件扩展名上编入索引的辅助数据库(例如MySQL)以及您需要的任何其他数据库,其中包含对S3位置的引用。