Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Rails:s3_direct_upload-如何保存/使用数据响应?_Jquery_Ruby On Rails_Ajax_Amazon S3_Coffeescript - Fatal编程技术网

Jquery Rails:s3_direct_upload-如何保存/使用数据响应?

Jquery 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() 在我的咖啡脚本中(正确地包含在资产管

我已经到处寻找答案了,所以我肯定以前没有人问过这个问题。救世主啊,请帮助我

我试图使用gem来处理直接上传到S3的文件,但是我不知道如何查看/使用/保存从S3服务器返回的数据。我已经读了十几遍s3_direct_upload的自述文件,它给出了一些JS代码的示例片段,但没有告诉我代码应该放在哪里

我已经完成了自述文件的第一部分,并设置了AWS配置和简单的jQuery

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}")