【问题标题】:Which is the best route to take when uploading images from my Rails app to Amazon's S3?将图像从我的 Rails 应用程序上传到 Amazon 的 S3 时,最佳途径是什么?
【发布时间】:2025-11-28 14:30:01
【问题描述】:

我有一个网络应用程序,用户可以在其中上传 700kb 以下的头像。这是应用程序中处理上传图像的唯一部分(所以我不会处理异常繁重的负载)。我想知道最好的方法是什么。目前我正在使用 Paperclip,我不想将所有图像都存储在 Amazon 的 S3 上。

选项 1:用户将图像上传到我的网络服务器。使用延迟作业对图像进行异步处理,然后上传到 s3。然后从我的网络服务器上删除该图像。

选项2:用户直接上传图片到s3。我的网络服务器上的后台进程下载图像,对其进行处理,然后将新创建的缩略图上传到 s3。

选项 1 似乎总体上使用较少的带宽。选项 2 似乎为我的应用程序节省了将图像直接上传到它的资源。

我的这些假设是否正确?哪个选项最快且最节省资源?还是有其他方法可以解决这个问题?

另外,我想知道 Twitter、FB 和 Posterous 等网站是否异步处理图像。每当我在 Twitter 上上传个人资料照片,或在 FB 和 Posterous 上上传图片时,它们似乎都会被立即处理。

谢谢!

提姆

【问题讨论】:

    标签: ruby-on-rails performance amazon-s3 paperclip delayed-job


    【解决方案1】:

    最好的办法是让用户直接上传到 S3。 d2s3 插件可以很好地解决这个问题。

    在您的 d2s3 回调中,创建 delay_job 事件以下载完整尺寸的图像并将缩略图保存到 S3 并使用Reduced Redundancy Storage。如果您正确连接所有内容,您可以在 S3 丢失时自动生成缩略图。

    【讨论】:

      【解决方案2】:

      如果“处理图像”是指创建缩略图或其他图像转换选项,则可以使用回形针来完成。如果处理是一项仅使用回形针无法完成的艰巨任务,那么我会选择选项 1,因为您不会多次访问 S3,所以更便宜。只需确保在处理过程中有足够的硬盘空间用于所有图像即可。

      【讨论】:

        【解决方案3】:

        如果您最终采用直接上传到 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

        【讨论】:

          最近更新 更多