使用Paperclip将上传文件定向到S3

sch*_*one 9 file-upload ruby-on-rails amazon-s3 paperclip ruby-on-rails-3

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

我得到的只是文件名和大小.我应该构建自己的处理器或before_post_process方法从S3"下载"该文件以进行处理吗?或者我错过了什么,uploadify应该在发布到S3之后为我提供了一个包含文件的流?

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

iwa*_*bed 8

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

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

我有时间后会添加后处理示例.

  • 我认为你对一些事情有误解:1)Heroku上传只对大文件很难,因为Heroku有30秒的请求超时,所以做大型文件首先必须通过服务器(正常实现的情况) Paperclip和CarrierWave)是不可能的,因为请求在上传完成之前超时.2)你永远不会分享你的秘密密钥(或者至少你永远不应该).您所做的是创建一个S3策略,其签名已使用您的密钥签名,并传递给亚马逊. (2认同)

小智 0

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

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

self.file.to_file
Run Code Online (Sandbox Code Playgroud)

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