2012-09-14 47 views
7

Tôi sử dụng tập lệnh này để tải tệp lên (từng cái một) với ứng dụng HTML5 FormData trong ứng dụng Rails 3.2.8.HTML5 FormData tải lên tệp với RubyOnRails

http://jsfiddle.net/RamPr/

$('.uploader input:file').on('change', function() { 
    $this = $(this); 

    $('.alert').remove(); 

    $.each($this[0].files, function(key, file) { 
    $('.files').append('<li>' + file.name + '</li>'); 

    data = new FormData(); 
    data.append(file.name, file); 

    $.ajax({ 
     url: $('.uploader').attr('action'), 
     contentType: 'multipart/form-data', 
     type: 'POST', 
     dataType: 'json', 
     data: data, 
     processData: false 
    }); 
    }); 
}); 

Nhưng khi tôi tải lên một tập tin, tôi nhận được lỗi này trong giao diện điều khiển:

webrick/server.rb:191:in `block in start_thread' ERROR ArgumentError: invalid %-encoding ("filename.jpeg" Content-Type: image/jpeg 

Làm thế nào tôi có thể giải quyết lỗi này?

Trả lời

16

Bạn đã thấy sự cố này chưa? Sending multipart/formdata with jQuery.ajax

Dường như bạn có thể đang chạy vào jQuery thêm tiêu đề loại nội dung, làm cho chuỗi ranh giới bị thiếu. Từ vấn đề liên kết ở trên:

Đó là mệnh lệnh mà bạn thiết lập các tùy chọn contentType-false, buộc jQuery không để thêm một header Content-Type cho bạn, nếu không, chuỗi ranh giới sẽ bị mất từ ​​nó. Ngoài ra, bạn phải để cờ processData được đặt thành false, nếu không, jQuery sẽ cố gắng chuyển đổi FormData của bạn thành chuỗi, sẽ không thành công.

Trên cơ sở đó, đưa ra một thử này:

$.ajax({ 
    url: $('.uploader').attr('action'), 
    contentType: false, 
    cache: false, 
    processData: false, 
    type: 'POST', 
    dataType: 'json', 
    data: data 
}); 

Tôi đã không cố gắng này bản thân mình, nhưng tôi nghi ngờ điều này có thể là droids bạn đang tìm kiếm :)

+0

Khi tôi không sử dụng processData, tôi nhận được Invocation bất hợp pháp. Nhưng với processData: sai, tôi nhận được một lỗi máy chủ nội bộ trong đường ray. – DGM

Các vấn đề liên quan