2011-08-31 7 views
6

बिना मैं जावास्क्रिप्ट XMLHttpRequest का उपयोग करने में एक छवि के डेटा को प्राप्त करने की कोशिश कर रहा हूँ।डाउनलोड कर रहा है द्विआधारी XMLHttpRequest का उपयोग कर डेटा, overrideMimeType

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "http://www.celticfc.net/images/doc/celticcrest.png"); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4) { 
     var resp = xhr.responseText; 
     console.log(resp.charCodeAt(0) & 0xff); 
    } 
}; 
xhr.send(); 

इस डेटा की पहली बाइट 0x89 होना चाहिए, फिर भी किसी भी उच्च मूल्य बाइट के रूप में 0xfffd (0xfffd & 0xff0xfd जा रहा है) वापस जाएँ।

this one जैसे प्रश्न overrideMimeType() फ़ंक्शन का उपयोग करके समाधान प्रदान करते हैं, हालांकि यह प्लेटफ़ॉर्म (Qt/QML) का उपयोग कर रहा है।

मैं डेटा सही ढंग से डाउनलोड कर सकते हैं?

+1

आप बेस 64 एन्कोड का उपयोग की कोशिश की? – cvsguimaraes

+0

मैं इसे कैसे कोशिश करूंगा? – funkybro

+0

लगता है कि यह संभव नहीं है; मैं इसके बजाय क्यूटी/सी ++ का उपयोग करके इसे मूल रूप से डाउनलोड करूंगा। – funkybro

उत्तर

5

Google I/O 2011: HTML5 Showcase for Web Developers: The Wow and the How

बाइनरी फ़ाइल लायें: नवीनतम को

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'http://www.celticfc.net/images/doc/celticcrest.png', true); 

xhr.responseType = 'arraybuffer'; 

xhr.onload = function(e) { 
    if (this.status == 200) { 
     var uInt8Array = new Uint8Array(this.response); // Note:not xhr.responseText 

     for (var i = 0, len = uInt8Array.length; i < len; ++i) { 
      uInt8Array[i] = this.response[i]; 
     } 

     var byte3 = uInt8Array[4]; // byte at offset 4 
    } 
} 

xhr.send(); 
+3

मेरे लिए काम नहीं कर रहा है, 'xhr.response' अपरिभाषित है। – funkybro

+0

मुझे उस लिंक को पोस्ट करने के लिए आपको एक मुफ्त बियर प्रदान करना अच्छा लगेगा –

+0

भविष्य के पाठकों के लिए टिप्पणी करें: यदि आप एररबफर को प्रतिक्रिया प्रकार के रूप में उपयोग करते हैं, तो क्रोम प्रोग्रेस ईवेंट के लिए xhr.response विशेषता सेट नहीं करेगा। तो क्रोम के तहत प्रगतिशील डाउनलोड/अपलोड के लिए यह अपहरण बेकार है। – yms

0

मैं क्यूटी से परिचित नहीं कर रहा हूँ, लेकिन मैं उनके documentation

string Qt::btoa (data) 
Binary to ASCII - this function returns a base64 encoding of data. 

में यह पाया तो, अपनी छवि को अगर

: एक png तुम कोशिश कर सकते है
resp = "data:image/png;base64," + btoa(resp); 
document.write("<img src=\""+resp+"\">"); 
+0

मुझे यकीन नहीं है कि यह कैसे काम करेगा यदि मैं स्ट्रिंग के माध्यम से सही बाइट मानों तक पहुंच नहीं पा रहा हूं। – funkybro

+0

बस 0 से शुरू करें! लेआउट इंजन हमेशा अनदेखा करते हैं जो छवियों को पुनर्निर्मित करने के लिए प्रासंगिक नहीं है। – cvsguimaraes

संबंधित मुद्दे