Tsu*_*aki 5 ajax jquery ruby-on-rails amazon-s3 coffeescript
我已经搜遍了所有的SO以获得答案,所以我确信之前没有被问过.请帮助我,救世主啊!
我正在尝试使用s3_direct_upload gem来处理直接上传到S3的文件,但我只是不知道如何查看/使用/保存显然是从S3服务器返回的数据.我已经阅读了s3_direct_upload的README十几次了,它给出了JS代码的一些示例片段,但没有告诉我该代码应该去哪里.
我已经完成了README的第一部分,并设置了AWS配置和简单的jQuery
jQuery ->
$("#s3-uploader").S3Uploader()
Run Code Online (Sandbox Code Playgroud)
在我的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 %>
Run Code Online (Sandbox Code Playgroud)
我希望用户上传work并填写一些字段.当用户单击该"Upload"按钮时,work应创建一个new ,其属性:url等于上载文件的url,以及与用户输入的文本相等的:name和:category属性.然后页面应重定向到show提交的工作页面.README给出了这个例子:
$('#myS3Uploader').bind "s3_upload_complete", (e, content) ->
$('#someHiddenField').val(content.url)
Run Code Online (Sandbox Code Playgroud)
但我不知道在哪里放这些代码.
这是我的控制器:(我知道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
Run Code Online (Sandbox Code Playgroud)
即使在阅读了README十几次之后,我仍然不明白究竟callback_url是什么callback_param,是什么,以及如何使用它们.更糟糕的是,加载此视图会产生错误--Rails不喜欢该callback_url: work_path部分.我不得不改变它以work_path(@work)使其加载,但我不确定这是否正确(因为我不明白callback_url).
从其他人询问的有关s3_direct_upload的问题来看,似乎他们已经知道如何使用它(问题只是较小的细节).所以我迷失了,因为我甚至无法让它在第一时间起作用.我对网络前端有点新意,所以请耐心跟我解释一下.非常感谢!
我还是不明白callback_url到底是什么,
callback_url是 gem 完成将文件上传到 s3 后通过 AJAX 发布的路径。所以work_path(@work)应该没问题。
$('#myS3Uploader').bind "s3_upload_complete", (e, content) ->
$('#someHiddenField').val(content.url)但我不知道把这段代码放在哪里。
您可以将上述代码放置在您放置 .coffeescript 的同一个 CoffeeScript 文件中$("#s3-uploader").S3Uploader()。$('#someHiddenField').val(content.url)用。。。来代替alert(content.url)。这样,如果上传成功,您将收到一条警报消息。
还将以下代码粘贴到同一个 CoffeeScript 文件中
$('#myS3Uploader').bind "s3_upload_failed", (e, content) ->
alert("#{content.filename} failed to upload : #{content.error_thrown}")
Run Code Online (Sandbox Code Playgroud)
如果出现错误,上面的代码将显示警报。
如果提交文件后没有看到两者中的任何一个,则存在其他问题。我强烈推荐使用firebug。它对于调试客户端 JavaScript 函数非常有帮助。在 firebug net 面板中,您可以查看 gem 是否正在调用 s3 服务器。它还会在控制台面板中显示任何 JavaScript 错误。
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |