Jquery Rails:s3_direct_upload-如何保存/使用数据响应?
我已经到处寻找答案了,所以我肯定以前没有人问过这个问题。救世主啊,请帮助我 我试图使用gem来处理直接上传到S3的文件,但是我不知道如何查看/使用/保存从S3服务器返回的数据。我已经读了十几遍s3_direct_upload的自述文件,它给出了一些JS代码的示例片段,但没有告诉我代码应该放在哪里 我已经完成了自述文件的第一部分,并设置了AWS配置和简单的jQueryJquery Rails:s3_direct_upload-如何保存/使用数据响应?,jquery,ruby-on-rails,ajax,amazon-s3,coffeescript,Jquery,Ruby On Rails,Ajax,Amazon S3,Coffeescript,我已经到处寻找答案了,所以我肯定以前没有人问过这个问题。救世主啊,请帮助我 我试图使用gem来处理直接上传到S3的文件,但是我不知道如何查看/使用/保存从S3服务器返回的数据。我已经读了十几遍s3_direct_upload的自述文件,它给出了一些JS代码的示例片段,但没有告诉我代码应该放在哪里 我已经完成了自述文件的第一部分,并设置了AWS配置和简单的jQuery jQuery -> $("#s3-uploader").S3Uploader() 在我的咖啡脚本中(正确地包含在资产管
jQuery ->
$("#s3-uploader").S3Uploader()
在我的咖啡脚本中(正确地包含在资产管道中)
我认为:
<%= s3_uploader_form callback_url: work_path, callback_param: "work[url]", class: "s3-uploader" do %>
<%= file_field_tag :file, multiple: false %>
<% end %>
<%= form_for(@work) do |f| %>
<%= f.label :name, "Title" %>
<%= f.text_field :name %>
<%= f.label :category, "Category" %>
<%= f.text_field :category %>
<br>
<%= f.submit "Upload", id: "btn-upload-work", class: "btn btn-large btn-warning btn-upload" %>
<% end %>
但我不知道把这段代码放在哪里
这是我的控制器:(我知道create
操作需要更改,但我不知道具体是什么。我已经用response\u to
进行了几个小时的实验,但没有任何效果。)
即使读了十几遍自述文件,我仍然不明白什么是callback\u url
,什么是callback\u param
,以及如何使用它们。更糟糕的是,加载此视图会出现错误-Rails不喜欢回调\u url:work\u path
部分。我必须将其更改为work\u路径(@work)
才能加载,但我不确定这是否正确(因为我不理解callback\u url
)
从其他人提出的关于s3_direct_upload的问题来看,他们似乎已经知道如何使用它(这些问题只是一些小细节)。所以我迷路了,因为一开始我甚至不能让它工作。我对网络前端有点陌生,所以请容忍我,并向我解释这一点。非常感谢
我还是不明白url到底是什么
callback\uURL
是gem将文件上传到s3后通过AJAX发布的路径。所以work\u路径(@work)
应该可以
$(“#myS3Uploader”)。绑定“s3_upload_complete”,(e,content)->$('#someHiddenField').val(content.url) 但我不知道把这段代码放在哪里 您可以将上述代码放在放置
$(“#s3 uploader”).S3Uploader()的同一个coffeescript文件中。将$('#someHiddenField').val(content.url)
替换为警报(content.url)
。这样,如果上传成功,您将收到一条警告消息
还将以下代码粘贴到同一个coffeescript文件中
$('#myS3Uploader').bind "s3_upload_failed", (e, content) ->
alert("#{content.filename} failed to upload : #{content.error_thrown}")
如果出现错误,上述代码将显示警报
如果您在提交文件后没有看到这两个文件中的任何一个,那么还有其他一些问题。我强烈推荐使用。它在调试客户端javascript函数时非常有用。在firebug网络面板中,您可以看到gem是否正在调用s3服务器。它还将在控制台面板中显示任何javascript错误。感谢您的快速响应。在我放入文件后,我发现文件根本没有被上传。什么可能会阻止文件上载?输入上述代码后,您是否收到任何警报?如果不是,请查看firebug控制台中的错误。我意识到表单代码应该使用“S3Uploader”作为id,而不是类。文件现在可以上传了,但我没有收到任何通知。这很奇怪。(在哪里可以看到警报?)完成一个步骤,现在查看rails服务器控制台,看看上传完成后它是否收到请求。它收到请求。参数:{“url”=>…,“文件路径”=>…,…,“工作”=>{“url”=>“…}}。创建工作
并将其插入到ActiveRecord
中,只使用:url
属性,但这不是我想要的。我只希望能够访问所有参数,因此我将工作
与其他文本字段一起保存。(我仍然没有看到任何警报。)
def show
@work = Work.find(params[:id])
end
def new
@work = Work.new
end
def create
@work = current_user.works.new(work_params)
if @work.save
flash[:success] = "Work successfully submitted!"
redirect_to @work
else
render 'new'
end
end
private
def work_params
params.require(:work).permit(:name, :category, :url)
end
$('#myS3Uploader').bind "s3_upload_failed", (e, content) ->
alert("#{content.filename} failed to upload : #{content.error_thrown}")