Rails中类似Hotfile的文件托管服务

时间:2013-12-22 21:46:42

标签: ruby-on-rails ruby file-upload

我工作的公司最近为我分配了为他们构建文件托管服务的任务,该服务应该以与Hotfile / Mediafire /等类似的方式工作。它需要具备所有功能,例如普通用户的下载速度限制,高级用户的高速下载,下载前的等待等。

我面临的主要问题是如何限制普通用户的速度。我们有大量数据(大约30TB),每天都有越来越多的数据上传。存储这些文件并将其提供给用户的理想方式是什么?

我想在Ruby on Rails中实现它,并计划使用Paperclip,Mongoid和Nginx。

1 个答案:

答案 0 :(得分:2)

你的问题真的很模糊。 Stack Overflow不是为了帮助您设计网站,而是为了回答特定的技术问题。那就是说,我就是这样做的:

  • 将您的文件存储在非公共S3(在任意时间戳/ GUIDS下)
  • 高级用户可通过限时签名链接直接访问S3上的文件(RoR进行身份验证,然后将302重定向发送到已签名的链接)
  • 对于不那么高级的用户,他们会使用nginx代理签名链接(他们从未看到实际的S3链接)
  • 使用X-Sendfile功能,以便Rails可以在每个请求中“循环”,但仍然可以将文件服务/代理卸载到nginx。
  • 不同类别的用户将拥有不同的内部位置,所有内容都代理到S3。 RoR决定使用哪个类,然后将已签名的链接放入要发送的nginx的Sendfile头中。
  • 我不是PaperClip的专家,但除非它支持你正在做的事情,否则它可能会比它有所帮助。
  • 如果所有文件都是“公共”,请不要将它们存储在数据库中。如果在S3中找不到,请让nginx提供友好的错误页面。 (是的,您将签署无处可用的链接,这会占用一点CPU。但它会使您的数据库免于成为瓶颈。)