我希望能够将包含许多图像的 zip 文件上传到我的 Rails 应用程序。然后我希望 Rails 解压缩该文件并通过Paperclip将里面的图像附加到我的照片模型中,以便它们最终存储在我的 Amazon S3 帐户中(通过 Paperclip 配置)。
我想在Heroku上托管的 Rails 站点上执行所有这些操作,不幸的是,它不允许任何类型的本地存储(据我所知)在 Paperclip 解析之前临时进行解压缩。
我该怎么做?
我建议直接上传到完全绕过 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
dmagkic 关于 rails_root/tmp 是正确的。我推荐如下内容:
这样,您的应用程序在上传过程中仍将是响应式的。
如果您尝试上传多个文件,您可以写入 /tmp,但只需确保所有文件都出现在同一个发布请求中。
Heroku 确实允许写入#{RAILS_ROOT}/tmp
.
但是您需要记住,只要请求持续,文件就会在那里。可能更长,但这不能保证。您可以在解压缩并发送到 S3 时尝试阻止请求,但您应该注意它所花费的时间。
在我看来,您需要一些可以解压缩并发送到 S3 的 Flash 上传程序,而无需 Heroku。