2012-12-10 36 views

Trả lời

4

Nếu mã hóa ký tự của XMLHttpRequest đã được thiết lập để something that won't change the binary data, hoặc bạn đã set the response type, sau đó bạn có thể chạy .responseText qua btoa (đặt nó trong base64 và cho phép bạn gán nó như một dữ liệu URI) hoặc truy cập .response cho dữ liệu nhị phân, tương ứng.


Giả dụ bạn được đặt tên xhr và bạn đang sử dụng phương pháp charset trước xhr.send nhưng sau xhr.open làm

xhr.overrideMimeType("text/plain; charset=x-user-defined"); 

sau đó khi bạn đang 200 OK

var dataURI = 'data:image/jpeg;base64,' + btoa(xhr.responseText); 

mà bạn có thể sau đó được đặt làm src trong số <img>.


Một lần nữa giả định xhr, lần này là phương pháp .response; giữa .open.send,

xhr.responseType = "arraybuffer"; 

Sau đó tại 200 OK

var arrayBufferView = new Uint8Array(xhr.response), // can choose 8, 16 or 32 depending on how you save your images 
    blob = new Blob([arrayBufferView], {'type': 'image\/jpeg'}), 
    objectURL = window.URL.createObjectURL(blob); 

nào thì bạn có thể thiết lập như là một src của một <img>. Example

+0

Đây được gọi là hình ảnh nội dòng. Lưu ý rằng IE8 chỉ hỗ trợ hình ảnh nội tuyến nhỏ hơn 32 KB (đối với dữ liệu được mã hóa base64, do đó hình ảnh nguồn phải nhỏ hơn 24 KB) và IE7 và trước đó không hỗ trợ hình ảnh nội tuyến (nếu vấn đề đó). –

+0

Đã thử rằng, nhưng 'btoa (xhr.responseText)' liên tục trả về 'Lỗi: INVALID_CHARACTER_ERR: Ngoại lệ DOM 5'. Tôi không thể tìm thấy lý do tại sao điều này xảy ra. Đối với IE7/IE8 ... Tôi sẽ phải tạo một đối tượng Flash để xử lý nó một cách nghiêm ngặt – Marc

+0

@Marc xảy ra vì 'btoa' có một số [lỗi] (https://bugzilla.mozilla.org/show_bug.cgi? id = 213047) (tương tự/tương tự cũng áp dụng cho webkit), tôi sẽ cập nhật câu trả lời bằng phương thức _ArrayBuffer_ -> 'Blob' -> thông qua _URL.createObjectURL_, theo ý kiến ​​của tôi là tốt hơn một chút so với thông qua _FileReader_ nhưng vẫn không đẹp như _btoa_. –

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