ruby-on-rails - 监控和导航 S3 存储桶以查找用户添加的新文件

标签 ruby-on-rails ruby-on-rails-3 amazon-web-services amazon-s3

我有一个 Rails 应用程序,可以使用元数据和 wav 文件对录制的音乐产品进行编目。

以前,我的用户可以选择通过 ftp 向我发送文件,我将使用 cron 任务监控新的 .complete 文件,然后选择其关联的 .xml 文件并执行元数据导入和音频文件传输到 S3 。

我经常达到之前 FTP 的容量限制,因此决定将用户“保管箱”移动到 S3,并使用 FTP 网关允许用户向我发送他们的文件。现在它在 S3 上,由于 S3 没有将对象存储在文件夹中,我正在努力了解如何导航存储桶,找到 .complete 文件,然后像往常一样执行导入。

无论如何,可以推荐如何“扫描”存储桶中的新 .complete 文件......读取文件名,然后传回我的应用程序,以便我可以获取它的 xml、wav 和 jpg 文件?

我的bucket中的文件结构是这样的。正如您所看到的,这里有两种产品。我需要找到两者并导入它们关联的 xml 数据和 wavs/jpg

42093156-5060156655634/
42093156-5060156655634/5060156655634.complete
42093156-5060156655634/5060156655634.jpg
42093156-5060156655634/5060156655634.xml
42093156-5060156655634/5060156655634_1_01_wav.wav
42093156-5060156655634/5060156655634_1_02_wav.wav
42093156-5060156655634/5060156655634_1_03_wav.wav
42093156-5060156655634/5060156655634_1_04_wav.wav
42093156-5060156655634/5060156655634_1_05_wav.wav
42093156-5060156655634/5060156655634_1_06_wav.wav
42093156-5060156655634/5060156655634_1_07_wav.wav
42093156-5060156655634/5060156655634_1_08_wav.wav
42093156-5060156655634/5060156655634_1_09_wav.wav
42093156-5060156655634/5060156655634_1_10_wav.wav
42093156-5060156655634/5060156655634_1_11_wav.wav
42093163-5060243322593/
42093163-5060243322593/5060243322593.complete
42093163-5060243322593/5060243322593.jpg
42093163-5060243322593/5060243322593.xml
42093163-5060243322593/5060243322593_1_01_wav.wav

最佳答案

虽然 Amazon S3 没有正式的文件夹概念,但您实际上可以通过 GET Bucket API 来模拟文件夹。 ,使用 delimiterprefix 参数。您将获得与在 AWS 管理控制台界面中看到的结果类似的结果。

使用它,您可以列出顶级目录,并扫描它们。找到顶级目录的名称后,您可以更改参数并发出新的 GET Bucket 请求,以列出“目录”内的"file",并检查是否存在 .complete 文件以及您的 .xml 和其他相关文件。

但是,您的问题可能有不同的方法:您是否考虑过使用SQS?您可以让接收上传的进程向 SQS 中的队列发送一条消息,例如,completed-uploads,其中包含刚刚完成的上传的文件夹名称。然后另一个进程将消耗队列并处理完成的上传。无需扫描S3中的目录。

请注意,如果您尝试 SQS 方法,您可能需要做好准备,可能会多次收到已完成上传的通知:SQS 保证它最终将传送已发布的消息至少一次;您可能会收到重复的消息! (您可以通过将收到的消息的 ID 保存在一致的数据库上,并根据同一数据库检查新收到的消息来识别重复的消息)。

此外,请记住,如果您对 S3 使用美国标准区域,则您没有写后读一致性,只有最终一致性,这意味着从 SQS 接收消息的进程可能会尝试从 S3 获取对象,但什么也得不到——只需重试,直到看到该对象。

关于ruby-on-rails - 监控和导航 S3 存储桶以查找用户添加的新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17384129/

相关文章:

ruby-on-rails - 使用 Rails 将 HTTP 实时流式传输到 Apple TV

ruby-on-rails - 使用 rails.vim,为什么当事件缓冲区为空或不是 rails 项目的文件时命令不起作用?

jquery - 如何循环显示一组 div(例如 Twitter 徽章小部件)?

ruby-on-rails - 使用 Rails 和 Paperclip 裁剪时如何获得图像的顶部区域?

node.js - 如何使用 npm elasticsearch 和 http-aws-es 连接到 AWS ElasticSearch?

python - 为什么 Amazon Linux 上的 .so 文件比 OS X 上的大 5 倍?

amazon-web-services - AWS SDK v3 - 如何获取 stack.Tags

ruby-on-rails - 如何在rails中使用response_to和response_with?

mysql - 如何修复 Zsh 中的 "command not found: mysql"

ruby-on-rails - Rails 国家精选 gem