我已经在整个 SO 中搜索了答案,所以我确定以前没有人问过这个问题。请帮助我,哦救世主!
我正在尝试使用s3_direct_upload gem 来处理将文件直接上传到 S3,但我只是不知道如何查看/使用/保存显然从 S3 服务器返回的数据。我已经阅读了 s3_direct_upload 的自述文件十几次,它提供了一些 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
and: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 的问题来看,他们似乎已经知道如何使用它(这些问题只是较小的细节)。所以我迷路了,因为我什至一开始就无法让它工作。我对网络前端有点陌生,所以请耐心等待并向我解释一下。非常感谢!