2012-07-12 23 views
5

के माध्यम से बाइनरी डेटा कैसे भेजें I JQuery और पर नया हूं, मैं कुछ फ़ाइलों को सर्वर पर अपलोड करने के लिए JQuery अजाक्स का उपयोग करना चाहता हूं, केवल PUT विधि में। जब मैं अपने सर्वर पर कुछ बाइनरी फ़ाइल (जैसे gif या jpeg) भेजता हूं, सफल अपलोड करता हूं, लेकिन बाइनरी डेटा की सामग्री बदल दी गई थी (यह मूल फ़ाइल आकार से हमेशा बड़ी होती है)। मैं सामग्री-प्रकार या फ़ाइल परिणाम के प्रकार को बदलने का प्रयास करता हूं, लेकिन फिर भी काम नहीं करता हूं। कोई भी जानता है कि इसे कैसे ठीक किया जाए?JQuery Ajax PUT विधि

पीएस: मैं बाइनरी फ़ाइल की सामग्री को अन्य रूप में एन्कोड नहीं कर सकता, क्योंकि मैं सर्वर के कोड को स्पर्श नहीं कर सकता।

var reader = new FileReader(); 

reader.onloadend = (function(Thefile) { 

    $.ajax({ 
     url: url, 
     processData:false, 
     //contentType:"application/octet-stream; charset=UTF-8", 
     data: file.result, 
     type: 'PUT', 
     success : function(){console.log("OK!");}, 
     error : function(){console.log("Not OK!");} 
    }); 
})(file); 

reader.readAsBinaryString(file); 
+0

मुझे एक समान समस्या का सामना करना पड़ा है। मेरा पहला अनुमान यह है कि अनुरोध को भेजने से पहले 'AJAX' फ़ंक्शन डेटा को संसाधित करने के तरीके से ऐसा करना होगा। –

+0

jQuery AJAX मशीनरी के बावजूद, ध्यान दें कि आपको reader.onloadend पर फ़ंक्शन असाइन करना चाहिए - उस फ़ंक्शन को स्वयं नहीं बुलाएं! – Tom

उत्तर

3

अधिकांश (सभी?) ब्राउज़र स्वत: जब एक XMLHttpRequest के माध्यम से उन्हें भेजने UTF-8 में स्ट्रिंग डेटाटाइप्स परिवर्तित कर देंगे। जब आप बाइनरी स्ट्रिंग के रूप में फ़ाइल को पढ़ते हैं, तो आपको बिल्कुल यह दिया जाता है: एक जावास्क्रिप्ट स्ट्रिंग ऑब्जेक्ट जहां प्रत्येक वर्ण 0 और 255 के बीच मान होता है।

AJAX अनुरोध को बाइनरी एन्कोडेड डेटा भेजने के लिए मजबूर करने के लिए, डेटा पैरामीटर ArrayBuffer, File, या Blob ऑब्जेक्ट होना चाहिए।

आप भेजने से पहले फ़ाइल की सामग्री के लिए उपयोग की जरूरत है, तो आप निम्न कोड के साथ एक ArrayBuffer को बाइनरी स्ट्रिंग परिवर्तित कर सकते हैं:

var arrBuff = new ArrayBuffer(file.result.length); 
var writer = new Uint8Array(arrBuff); 
for (var i = 0, len = file.result.length; i < len; i++) { 
    writer[i] = file.result.charCodeAt(i); 
} 

और तुम AJAX के कार्य करने के लिए arrBuff उदाहरण दे देते हैं । अन्यथा, आप File ऑब्जेक्ट को अपने AJ12 फ़ंक्शन में अपने सभी FileReader कोड के बिना पास करने में सक्षम होना चाहिए।