【问题标题】:Using Paperclip to direct upload files to S3使用 Paperclip 将文件直接上传到 S3
【发布时间】:2011-06-29 13:47:20
【问题描述】:

所以我已经使用uploadify 设置了回形针以将内容上传到S3。我已经进行了设置,以便将内容直接加载到 S3,然后在完成后将结果发布到我的网络服务器......

我得到的只是文件名和大小。我应该构建自己的处理器或 before_post_process 方法来从 S3“下载”文件以便处理它吗?还是我错过了什么,uploadify 应该在将文件发布到 S3 后为我提供了一个包含文件的流?

你们如何直接上传到 S3,然后通知您的回形针支持模型?您是否必须从服务器中提取文件并对它们进行后处理,或者回形针会处理所有这些吗?

【问题讨论】:

  • “直接上传”是什么意思?使用回形针,上传通过您的网络服务器,对吗?所以你有文件,在内存或 tmp/.您如何/何时“将结果发布到网络服务器”?
  • 不一定,你可以一起绕过webserver,只用Paperclip做图像处理和对象管理。

标签: ruby-on-rails ruby-on-rails-3 file-upload amazon-s3 paperclip


【解决方案1】:

您可以创建处理器或使用回调方法,但文件在转到 S3 之前肯定会在您的服务器上。

例如,如果您在回调方法中,则可以使用以下方式访问它:

self.file.to_file

完成后处理和上传文件将从您的服务器中删除。您无需执行任何操作来通知或发布流程。回形针会处理它。

【讨论】:

    【解决方案2】:

    这里有几篇博客文章描述了如何做到这一点......

    http://www.railstoolkit.com/posts/uploading-files-directly-to-amazon-s3-using-fancyupload

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

    他们使用 FancyUploader(使用 MooTools/Flash)直接上传到 S3,同时绕过 Heroku 和他们可怕的 30 秒请求超时,然后使用 DelayedJob 将缩略图和 PaperClip 等后处理任务排队来执行实际操作处理文件。

    如果我可以使用 CarrierWave 完成这项工作,我将在 GitHub 上发布一个项目以供分享(一旦我有时间,一周左右)

    更新

    使用 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

    我会在有时间的时候添加后处理示例。

    【讨论】:

    • 你不想用 flash 做这个!顺便说一句,这在没有 flash 的 heroku 上完美运行,听起来你甚至没有尝试过。
    • 1) 您不能使用 HTML5 上传器来访问 S3,因为他们还不允许这样做。他们还有其他上传者,例如 plupload,如果您对 Flash 不满意,您也可以使用 Silverlight、Google Gears 等进行上传。 2)我有一个使用 2 种不同上传器的 Heroku 示例。我计划在完成后将代码发布在这里。 3) 尝试提供帮助而不是无礼。
    • 您给人的印象是在 heroku 上上传很困难,并且需要其他解决方案而不是普通的回形针/carrierwave,这是错误的。这对其他可能会被误导选择他们不需要的东西的人很有帮助,IMO。 S3 需要密钥,绕过服务器(这是目标对吗?)需要通过闪存或其他方式保存密钥(还有其他选择吗?)。我不鼓励为此使用 flash。
    • 我认为您对几件事有误解:1)在 Heroku 上上传仅对大文件很困难,因为 Heroku 有 30 秒的请求超时,因此首先必须通过服务器处理大文件(与 Paperclip 和 CarrierWave 的正常实现一样)是不可能的,因为在上传完成之前请求超时。 2)你永远不会分享你的密钥(或者至少你永远不应该)。相反,您要做的是创建一个带有签名的 S3 策略,该签名已使用您的密钥签名,该密钥会传递给 Amazon。
    • Flash 永远不会知道您的密钥,因为您将所有这些信息保存在 Rails 应用程序中。你从不暴露任何东西。如果您只是因为您列出的这些原因不鼓励使用 Flash,您可能需要重新考虑。
    猜你喜欢
    • 2014-08-11
    • 2014-10-23
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2015-04-12
    相关资源
    最近更新 更多