我已经搜索过所有的答案,所以我确信这并没有问过。请帮助我,救世主!Rails:s3_direct_upload - 如何保存/使用数据响应?
我想用s3_direct_upload gem来直接上传文件到S3,但我不知道如何看到/使用/保存显然是从S3服务器返回的数据。我读过s3_direct_upload的README十几次,它给出了一些JS代码片段的例子,但并不告诉我该代码应该在哪里。
我已经通过自述文件的第一部分工作,并成立了AWS的配置和简单的jQuery
jQuery ->
$("#s3-uploader").S3Uploader()
在我的CoffeeScript(这是正确包含在资产管道)。
我有这个在我看来:
<%= 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 %>
我希望用户上传work
并在某些领域填补。当用户单击"Upload"
按钮时,应创建一个新的work
,其属性:url
等于上传文件的URL,以及等于用户输入的文本的:name
和:category
属性。然后页面应该重定向到提交作品的show
页面。自述文件给出了这个例子:
$('#myS3Uploader').bind "s3_upload_complete", (e, content) ->
$('#someHiddenField').val(content.url)
但我不知道该把这段代码放在哪里。
这是我的控制器:(我知道create
动作需要改变,但我不知道到底是什么我已经试验了几个小时,respond_to
无济于事。)
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
即使经过阅读README十几次,我还是不明白callback_url
究竟是什么,callback_param
是什么,以及如何与他们合作。更糟的是,加载这个视图给出了一个错误 - Rails不喜欢callback_url: work_path
部分。我必须将其更改为work_path(@work)
以使其加载,但我不确定是否正确(因为我不了解callback_url
)。
从其他人询问s3_direct_upload的问题看来,他们已经知道如何使用它(问题只是较小的细节)。所以我迷路了,因为我甚至无法让它开始工作。我对网络前端有点新,所以请耐心等待并向我解释。非常感谢!
感谢您的快速反应。我看到文件放入文件后根本没有上传文件。什么可能会阻止文件上传? – Tsubaki
在输入上述代码后是否会收到任何提醒?如果没有看到萤火虫控制台的错误。 – tihom
我意识到,表单代码应该有“S3-上传”作为ID而不是类。现在文件上传正常,但我没有收到任何警报。这很奇怪。 (我会在哪里看到的警报?) – Tsubaki