2011-08-31 36 views
6

Tôi đang cố truy xuất dữ liệu của hình ảnh trong Javascript bằng cách sử dụng XMLHttpRequest.Tải xuống dữ liệu nhị phân bằng cách sử dụng XMLHttpRequest, mà không ghi đè lênMimeType

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

Byte đầu tiên của dữ liệu này nên 0x89, tuy nhiên bất kỳ byte có giá trị cao trở lại như 0xfffd (0xfffd & 0xff0xfd).

Các câu hỏi như this one các giải pháp cung cấp bằng chức năng overrideMimeType(), tuy nhiên điều này không được hỗ trợ trên nền tảng tôi đang sử dụng (Qt/QML).

Làm cách nào để tải xuống dữ liệu chính xác?

+1

Bạn đã thử sử dụng mã hóa base64 chưa? – cvsguimaraes

+0

Tôi sẽ thử như thế nào? – funkybro

+0

Dường như điều này là không thể; Tôi sẽ tải về nó nguyên bản bằng cách sử dụng Qt/C++ thay thế. – funkybro

Trả lời

5

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

Fetch tập tin nhị phân: nóng mới

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

Không hoạt động đối với tôi, 'xhr.response' không được xác định. – funkybro

+0

Tôi rất muốn cung cấp cho bạn một bia miễn phí để đăng liên kết đó –

+0

Lưu ý cho người đọc trong tương lai: nếu bạn sử dụng bộ đệm kiểu như responseType, chrome sẽ KHÔNG đặt thuộc tính xhr.response cho các sự kiện onprogress. Vì vậy, thẩm định này là vô ích cho tải xuống/tải lên liên tục trong chrome. – yms

0

Tôi không quen với Qt nhưng tôi thấy điều này trong họ documentation

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

Vì vậy, nếu hình ảnh của bạn là một png bạn có thể thử:

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

Tôi không chắc chắn làm thế nào mà sẽ làm việc nếu tôi không thể truy cập các giá trị byte chính xác thông qua chuỗi để bắt đầu với. – funkybro

+0

Chỉ mới bắt đầu từ 0! Công cụ bố cục luôn bỏ qua những gì không liên quan đến việc redering hình ảnh. – cvsguimaraes

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