2013-09-24 3 views
5

Я искал все ответы, поэтому я уверен, что этого раньше не спрашивали. Пожалуйста, помогите мне, спаситель!Rails: s3_direct_upload - Как сохранить/использовать ответ данных?

Я пытаюсь использовать камень s3_direct_upload для обработки файлов непосредственно на S3, но я просто не знаю, как видеть/использовать/сохранять данные, которые, по-видимому, возвращаются с сервера S3. Я читал README для s3_direct_upload дюжину раз, и он дает некоторые примеры фрагментов кода JS, но не говорит мне, куда должен идти этот код.

Я работал в первой части README и создать 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, равным тексту, введенному пользователем. Затем страница должна быть перенаправлена ​​на страницу представленной работы. В README приведен пример:

$('#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, кажется, что они уже знают, как им пользоваться (вопросы - это только более мелкие детали). Поэтому я потерялся, потому что я даже не могу заставить его работать в первую очередь. Я немного новичок в веб-интерфейсах, поэтому, пожалуйста, несите меня и объясните мне это. Спасибо!

ответ

3

Я до сих пор не понимаю, что на самом деле callback_url,

callback_url это путь, который он будет отправлять сообщения через AJAX после самоцвет заканчивает загрузки файла на s3. Так что work_path(@work) должно быть в порядке.

$ ('# myS3Uploader') связывают "s3_upload_complete", (е, содержание) -..>
$ ('# someHiddenField') Вал (content.url)

Но у меня нет идея, где поставить этот бит кода.

Вы можете разместить вышеуказанный код в том же файле 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}") 

Приведенный выше код покажет предупреждение, если произошла ошибка.

Если вы не видите ни одного из двух после отправки файла, то есть еще одна проблема. Я настоятельно рекомендую использовать firebug. Это действительно полезно при отладке javascript-функций на стороне клиента. В панели панели firebug вы можете узнать, совершает ли gem вызов на s3-сервере или нет. На панели консоли также будут отображаться ошибки javascript.

+0

Спасибо за быстрый ответ. Я вижу, что файл не загружается вообще после ввода файла. Что может помешать загрузке файла? – Tsubaki

+0

Вы получаете предупреждения после ввода вышеуказанных кодов? Если вы не смотрите на консоль firebug для ошибок. – tihom

+0

Я понял, что код формы должен иметь «s3-uploader» как id вместо класса. Файл теперь загружается отлично, но я не получаю никаких предупреждений. Это очень странно. (Где я могу увидеть предупреждения?) – Tsubaki

Смежные вопросы