通过Heroku上托管的Rails上传和解压缩文件到S3?

我希望能够将zip文件上传到包含许多图像的Rails应用程序。 然后我希望Rails解压缩该文件并通过Paperclip将图像内部附加到我的Photo模型中,以便它们最终存储在我的Amazon S3帐户上(通过Paperclip配置)。

我想在Heroku上托管的Rails站点上做这一切,遗憾的是,在Paperclip解析之前暂时不允许任何类型的本地存储(据我所知)暂时解压缩。

我该怎么办?

我建议直接上传到完全绕过Heroku的S3,这样你就不会限制他们强制执行的30秒请求超时(在命中时间之后丢弃你的上传)或1gb /tmp目录限制。 上传文件后,您可以使用文件的名称和位置对Rails应用程序进行POST,然后执行解压缩操作。 如果您想使用Paperclip进行后期处理,我在下面附上了一个链接。 如果您最终将上传路径直接上传到S3,从而卸载Rails服务器上的工作,请查看我的示例项目:

使用Rails 3,Flash和基于MooTools的FancyUploader直接上传到S3的示例项目: https : //github.com/iwasrobbed/Rails3-S3-Uploader-FancyUploader

使用Rails 3,Flash / Silverlight / GoogleGears / BrowserPlus和基于jQuery的Plupload的示例项目直接上传到S3: https : //github.com/iwasrobbed/Rails3-S3-Uploader-Plupload

以下是Paperclip后期处理的链接,例如图像:

http://www.railstoolkit.com/posts/fancyupload-amazon-s3-uploader-with-paperclip

关于rails_root / tmp,dmagkic是正确的。 我推荐如下内容:

  • 通过heroku将文件上传到S3
  • 设置后台作业以压缩文件(存储您需要分组的文件名)
  • 运行从S3下载文件的BJ,压缩它们,将zip发送到S3,删除解压缩的文件。

这样,您的应用程序在上传过程中仍然会响应。

如果您尝试上传多个文件,您可以写入/ tmp,但只需确保在同一个post请求中遇到所有文件。

Heroku允许写入#{RAILS_ROOT}/tmp

但是你需要记住,只要请求持续,文件就会存在。 可能更长,但不能保证。 解压缩并发送到S3时,您可以尝试阻止请求,但是您应该花些时间来处理它。

听起来像你需要一些可以解压缩并发送到S3的flash上​​传程序,而不需要Heroku。