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

时间:2010-08-09 14:53:11

标签: ruby-on-rails heroku paperclip unzip

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

我想在Heroku上托管的Rails网站上执行此操作,遗憾的是,不允许任何类型的本地存储(据我所知)在此之前暂时解压缩回形针解析。

我该怎么做?

3 个答案:

答案 0 :(得分:5)

我建议您直接上传到完全绕过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

答案 1 :(得分:3)

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

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

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

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

答案 2 :(得分:1)

Heroku允许写入#{RAILS_ROOT}/tmp

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

听起来我需要一些可以解压缩并发送到S3而不需要Heroku的flash上​​传器。