我正在使用Rails s3_direct_upload gem来启用我的Heroku应用程序直接从用户浏览器上传文件,但是我在使用它时遇到了一些困难。我看到了三个问题。
花了一段时间才进入这个阶段,我最初遇到了很多麻烦,只是从亚马逊返回错误,但通过包含" 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)),但尚未得到解答。所以我还有点亏。
有人有什么想法吗?