2012-09-19 68 views
1

我在使用https://github.com/blueimp/jQuery-File-Upload将文件上传到我的Rails应用程序中的S3(已安装此软件:https://github.com/tors/jquery-fileupload-rails)。使用jQuery fileupload插件直接上传到Amazon S3

这是我的表格。由于我只需要上传文件并在稍后创建文档,因此它不是form_for。

<%= form_tag 'Bucket URL SNIP', :multipart => true, :id => "fileupload" do %> 
    <%= hidden_field_tag 'key', @token %> 
    <%= hidden_field_tag 'AWSAccessKeyId', ACCESSKEYSNIP %> 
    <%= hidden_field_tag 'acl', 'public-read' %> 
    <%= hidden_field_tag 'success_action_status', '200' %> 
    <%= hidden_field_tag 'policy', controller.s3_policy_document %> 
    <%= hidden_field_tag 'signature', controller.signature %> 
    <% end %> 

而jQuery的上传者是这样初始化:

$(function() { 

     $('#fileupload').fileupload({ 

     forceIframeTransport: true 

     }); 

    }); 

一切正常,我看到了UI,但是当文件的进度条完成后,它给了我一个错误,该文件不实际上传。

TypeError:iframe未定义。 (Firefox) TypeError:TypeError:无法读取属性'0'的未定义(Chrome)

可能是什么问题?

编辑:

望着的Javascript控制台,我得到这样一个错误(取代了真实地址):

Unsafe JavaScript attempt to access frame with URL BUCKETURL from frame with URL SERVERURL. Domains, protocols and ports must match. 
+0

可以共享政策文件? –

+0

http://ideone.com/9f4XD 通用存储桶名称,该标记与 – SMK

+0

相同放置'starts-with','$ key',''而不是'starts-with','$关键',#{令牌} –

回答

7

我最近写了一篇关于如何直接将文件上传到S3一个简短的教程,希望它会帮助你:

http://pjambet.github.com/blog/direct-upload-to-s3/

+0

您的代码是否以与未由模型支持的上传相同的方式工作?它让我觉得没必要去你的服务器,依然。 – Mohamad

3

亚马逊AWS最近宣布了CORS的支持。这意味着您不必使用iframe方法直接上传到S3。现在你可以使用HTML5而不用担心了。

它还将允许您使用拖放等功能。

要启用直接的HTML5上传,您只需调整存储桶属性中的存储桶CORS设置即可。