2015-04-02 2 views
0

Я пытаюсь извлечь полный путь к файлу, который был загружен из папки, в Dropzone в Chrome. Загрузка файла и все другие метаданные передаются должным образом. Я просто хочу передать полный путь к файлу, который также загружается.Отправить Dropzone file.fullPath to Rails controller

Я попытался много исправить эту проблему, но все же скорее новый, особенно для Javascript. Это мои ресурсы:

Get uploaded file from Dropzone

Passing JQuery Datepicker Data to Rails Controller

Passing the variables from from jquery to rails controller

How to pass variables from AJAX form into controller?

Dropzone.js and full path for each file (, который не имеет никакого ответа)

Это мои попытки:

Закачивает new.html.erb

<%= form_for([@parent, @upload], method: :post, html: { multipart: true, class: "dropzone", id: "upload-dropzone"}) do |f| %> 

    <% if @upload.errors.any? %> 
    <ul> 
     <% @upload.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
    </ul> 
    <% end %> 
    <%= hidden_field_tag :full_path %> 
    <%= javascript_tag do %> 
    window.parent = '<%= @parent.id %>'; 
    <% end %> 

<% end %> 

application.js

//= require jquery 
//= require jquery_ujs 
//= require dropzone 
//= require turbolinks 
//= require_tree . 
// Dropzone.autoDiscover = false; 

// $(document).ready(function(){ 
// var myDropzone = Dropzone.getElementById("upload-dropzone"); 
// new Dropzone(myDropzone); 
// myDropzone.on("sending", function(file, xhr, formData){ 
//  formData.append('full_path', file.fullPath); 
// }) 
// console.log(file.fullPath); 
// }) 

// var myDropzone = new Dropzone("#upload-dropzone"); 
// document.querySelector("#upload-dropzone").classList.add("dropzone"); 
// var myDropzone = document.getElementById("upload-dropzone"); 
// Dropzone.myDropzone.on("sending", function(file, xhr, formData){ 
// formData.append('full_path', file.fullPath); 
// }) 

Dropzone.options.uploadDropzone = { 

    accept: function(file, done){ 
    var fullPath = { full_path: file.fullPath }; 
    $.ajax({ 
     type: "POST", 
     data: { full_path: fullPath.full_path } 
    }); 
    done(); 
    } 
} 

В application.js также есть другие мои попытки экстрагирования fullPath из элемента jQuery Dropzone. В незакомментированной функции, я могу получить доступ полного пути в консоли JavaScript с:

file.fullPath 

Я хотел бы получить доступ к этому в:

загрузок контроллера

def create 
    @parent = Parent.find(params[:parent_id]) 
    # here is an attempt to create the upload with the file_path 
    @upload = Upload.new(upload: params[:file], full_path: params[:full_path]) 
    if @upload.save! 

    respond_to do |format| 
     format.json{ render json: @upload } 
    end 
    end 
end 

Маршруты. rb

resources :parent do 
    post 'uploads/new' => 'uploads#new' 
end 

ответ

3

Это то, что работает:

добавление к application.js

Dropzone.options.uploadDropzone = false; 

добавляя к upload.js

var myDropzone = new Dropzone("#upload-dropzone"); 
myDropzone.on("sending", function(file, xhr, formData) { 
    formData.append("full_path", file.fullPath); 
}); 
+0

+1, но мне не нужно, чтобы установить 'uploadDropzone 'to' false' для этого. Обратный вызов 'send' работал для меня. – starfry