5

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

我想在Heroku上托管的 Rails 站点上执行所有这些操作,不幸的是,它不允许任何类型的本地存储(据我所知)在 Paperclip 解析之前临时进行解压缩。

我该怎么做?

4

3 回答 3

5

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

Sample project using Rails 3, Flash and MooTools-based FancyUploader to upload directly to S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-FancyUploader

Sample project using Rails 3, Flash/Silverlight/GoogleGears/BrowserPlus and jQuery-based Plupload to upload directly to S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-Plupload

Here is the link for the Paperclip post processing for an example like images:

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

于 2011-05-27T16:32:06.463 回答
3

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

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

这样,您的应用程序在上传过程中仍将是响应式的。

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

于 2010-08-09T15:18:51.333 回答
1

Heroku 确实允许写入#{RAILS_ROOT}/tmp.

但是您需要记住,只要请求持续,文件就会在那里。可能更长,但这不能保证。您可以在解压缩并发送到 S3 时尝试阻止请求,但您应该注意它所花费的时间。

在我看来,您需要一些可以解压缩并发送到 S3 的 Flash 上传程序,而无需 Heroku。

于 2010-08-09T15:10:31.180 回答