繁体   English   中英

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

[英]How to filter .mp3 files using Amazon S3 listObjects

我将Amazon S3服务与node.js结合使用,并且我想使用Amazon S3 listObjects()过滤目录中的所有.mp3文件。 有一个prefix参数,但没有sufix 有什么方法可以使用正则表达式或* .mp3之类的过滤器来实现?

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

var prefix = "myS3dir/";
bucket.listObjects({Prefix:prefix}, function(err, data){
    //do something with data
});

不,这对于S3是不可能的。 您只能按前缀在服务器端进行过滤。 这与以下事实有关:S3没有真正的密钥层次结构,它主要是密钥对象存储,并且前缀匹配在那里起作用。

如果要进行后缀匹配,则基本上必须拉出所有键的名称并在客户端进行检查。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM