2011-08-31 20 views
6

Bir resmin verilerini, XMLHttpRequest kullanarak Javascript'te bulmaya çalışıyorum.XMLHttpRequest kullanarak ikili veri indirme overrideMimeType olmadan

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

bu ilk veri baytı, ancak herhangi bir yüksek değer bayt 0xfffd (0xfd olmak 0xfffd & 0xff) olarak geri, 0x89 olmalıdır.

this one gibi sorular overrideMimeType() işlevini kullanarak çözümler sunar, ancak bu, kullandığım platformda (Qt/QML) desteklenmez.

Verileri doğru bir şekilde nasıl indirebilirim?

+1

base64 kodlamasını kullanmaya çalıştınız mı? – cvsguimaraes

+0

Bunu nasıl deneyebilirim? – funkybro

+0

Bu mümkün değil gibi görünüyor; Bunun yerine yerel olarak Qt/C++ kullanarak indireceğim. – funkybro

cevap

5

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

ikili dosyayı getir: yeni ve önemli

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

Benim için çalışmıyor, 'xhr.response' undefined. – funkybro

+0

Gelecek okuyucular için –

+0

Remark linkini yayınlamak için size ücretsiz bir bira teklif etmeyi seviyorum: responseBuffer'ı responseType olarak kullanırsanız, chrome onprogress olayları için xhr.response özniteliğini ayarlamaz. Yani bu appraoch krom altında ilerici indirme/yükleme için işe yaramaz. – yms

0

Ben Qt aşina değilim fakat resim eğer ben, Yani onların documentation

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

buldum deneyebileceğiniz bir png:

resp = "data:image/png;base64," + btoa(resp); 
document.write("<img src=\""+resp+"\">"); 
+0

Başlayacak dizeyle doğru bayt değerlerine erişemediğimde bunun nasıl çalışacağından emin değilim. – funkybro

+0

Sadece 0'dan başla! Mizanpaj motorları, görüntüleri yeniden boyutlandırmak için uygun olmayan şeyleri daima göz ardı eder. – cvsguimaraes

İlgili konular