S3直接上传 - 上传文件的几个问题

时间:2015-03-07 13:24:13

标签: javascript ruby-on-rails ruby amazon-s3

我正在使用Rails s3_direct_upload gem来启用我的Heroku应用程序直接从用户浏览器上传文件,但是我在使用它时遇到了一些困难。我看到了三个问题。

  1. 上传时,会在S3存储桶中创建正确的文件夹,但不会显示任何文件。
  2. 上传返回XML PostResponse页面而不是指定的控制器操作。
  3. 我已将多个文件标志设置为false,但我可以继续在上传表单中添加文件。
  4. 花了一段时间才进入这个阶段,我最初遇到了很多麻烦,只是从亚马逊返回错误,但通过包含" hidden_​​field_tag' Content-type&来解决这个问题。 #39;,''"标签

    Initialiser:config / s3_direct_upload.rb

    S3DirectUpload.config do |c|
        c.access_key_id = <KEY>
        c.secret_access_key = <SECKEY>
        c.bucket = 'bucket'
        c.region = 's3-ap-southeast-2'
        c.url = nil
    end
    

    Javascript:application.js

    //= require jquery
    //= require jquery_ujs
    //= require bootstrap.min
    //= require fuelux.min
    //= require bootstrap-datepicker
    //= require moment
    //= require daterangepicker
    //= require meiomask
    //= require s3_direct_upload
    
    ...
    
    $(function() {
        $("#s3-uploader").S3Uploader();
    });
    

    视图中的代码:

    <div class="transaction_area">
        <%= s3_uploader_form callback_url: {:controller => 'sales', :action => 'upcreate', :id => @organisation.id},
                         callback_param: 'model[image_url]',
                         key: "organisations/org_#{@organisation.id}/sales/${filename}",
                         key_starts_with: 'organisations/',
                         id: 's3-uploader' do %>
        <%= hidden_field_tag 'Content-type', '' %>
        <%= file_field_tag :file, multiple: false %>
        <%= submit_tag 'Upload' %>
    <% end %>
    
    <script id="template-upload" type="text/x-tmpl">
        <div id="file-{%=o.unique_id%}" class="upload">
          {%=o.name%}
          <div class="progress"><div class="bar" style="width: 0%"></div></div>
        </div>
    </script>
    

    它给了我这个结果:

    <PostResponse>
        <Location>
             https://s3-ap-southeast-2.amazonaws.com/bucket/organisations%2Forg_1%2Fsales%2F
        </Location>
        <Bucket>bucket</Bucket>
        <Key>organisations/org_1/sales/</Key>
        <ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag>
    </PostResponse>
    

    我认为我已经做了所有必要的事情,但有人可以检查一下,让我知道我做错了什么,或者错过了什么。欢呼声。

    更新1

    好。取得了一些进展。事实证明,我的CORS配置中存在很多问题。我使用了https://github.com/waynehoover/s3_direct_upload文档中指定的那个

    <CORSConfiguration>
        <CORSRule>
            <AllowedOrigin>http://0.0.0.0:3000</AllowedOrigin>
            <AllowedMethod>GET</AllowedMethod>
            <AllowedMethod>POST</AllowedMethod>
            <AllowedMethod>PUT</AllowedMethod>
            <MaxAgeSeconds>3000</MaxAgeSeconds>
            <AllowedHeader>*</AllowedHeader>
        </CORSRule>
    </CORSConfiguration>
    

    将AllowedOrigin更改为

            <AllowedOrigin>*</AllowedOrigin>
    

    上传现在将文件上传到S3存储桶中的正确文件夹。 (我之前也将端口更改为3002,因为那是运行开发服务器的地址,但这没有任何效果。它使用了看似已经完成的技巧的通配符。)

    它也不再返回PostResponse页面,当选择文件时,它会自动上传,无需等待添加额外文件,也无需单击提交按钮(我已删除)。

    但是,它现在没有点击callback_url而在我的日志中我看到了错误

    ERROR bad URI `/organisation/1/sales/[object%20Object]'.
    

    我发现了关于此事的问题(Bad URI Error using the s3_direct_upload gem (Javascript/RoR)),但尚未得到解答。所以我还有点亏。

    有人有什么想法吗?

0 个答案:

没有答案