2012-09-14 34 views
7

के साथ एचटीएमएल 5 फॉर्मडाटा फ़ाइल अपलोड करें मैं इस स्क्रिप्ट का उपयोग फ़ाइल (एक करके एक) अपलोड करने के लिए रेलवे 3.2.8 एप्लिकेशन में एचटीएमएल 5 फॉर्मडाटा के साथ करता हूं।रूबीऑनरल

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

मैं इस त्रुटि को कैसे हल कर सकते हैं:

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

लेकिन जब मैं एक फ़ाइल अपलोड, मैं कंसोल में इस त्रुटि मिलती है?

उत्तर

16

क्या आपने यह मुद्दा देखा है? Sending multipart/formdata with jQuery.ajax

ऐसा लगता है कि आप jQuery में सामग्री-प्रकार शीर्षलेख जोड़कर चल रहे हैं, जो सीमा स्ट्रिंग को गायब होने का कारण बनता है।

यह आवश्यक है कि आप अन्यथा false को contentType विकल्प सेट, jQuery आप के लिए एक Content-Type हैडर जोड़ने के लिए नहीं मजबूर है, सीमा स्ट्रिंग यह से गायब हो जाएगा: ऊपर लिंक मुद्दे से। साथ ही, आपको processData ध्वज को false पर सेट करना होगा, अन्यथा, jQuery आपके फॉर्मडेटा को एक स्ट्रिंग में कनवर्ट करने का प्रयास करेगा, जो असफल हो जाएगा।

उस आधार पर, इस आजमाइए:

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

मैं अपने आप को इस प्रयास नहीं किया है, लेकिन मुझे लगता है इस ड्रौयड आप :)

+0

के लिए देख रहे हो सकता है जब मैं प्रक्रिया डेटा का उपयोग न करें, मुझे अवैध आमंत्रण मिलता है। लेकिन प्रक्रिया डेटा के साथ: झूठी, मुझे रेल में आंतरिक सर्वर त्रुटि मिलती है। – DGM