Używanie surowych danych obrazu z żądania ajax dla URI danych

Próbuję użyć kombinacji Ajax i danych URI do załadowania obrazu JPEG i wyodrębnienia jego danych EXIF ​​za pomocą pojedynczego żądania HTTP. Zmieniam bibliotekę (https://github.com/kennydude/photosphere) aby to zrobić; obecnie ta biblioteka używa dwóch żądań HTTP do ustawienia źródła obrazu i uzyskania danych EXIF.

Uzyskanie EXIF ​​działa bez problemu. Mam jednak trudności z wykorzystaniem surowych danych z żądania ajax jako źródła obrazu.

Kod źródłowy dla małego testu tej techniki:

<!DOCTYPE html>
<html>
<head>
<script type='text/javascript'>

function init()
{
    // own ajax library - using it to request a test jpg image
    new Ajax().sendRequest
    (
        "/images/photos/badger.jpg",
         { method : "GET",
            callback: function(xmlHTTP)
            {

                var encoded = btoa (unescape(encodeURIComponent(xmlHTTP.responseText)));
                var dataURL="data:image/jpeg;base64,"+encoded;

                document.getElementById("image").src = dataURL;
            }
        }
    );
}

</script>
<script type="text/javascript" src="http://www.free-map.org.uk/0.6/js/lib/Ajax.js"></script>
</head>
<body onload='init()'>
<img id="image" alt="data url loaded image" />
</body>
</html>

Dostaję to, co wygląda jak odczytywane jawne dane jpeg, a długość (w bajtach) nieprzetworzonych danych i surowych danych zakodowanych w base64, a następnie niezakodowanych ponownie jest taka sama. Jednak próba ustawienia obrazu src kończy się niepowodzeniem w obu Firefox (25) i Chrome (31) (bieżące wersje) - chrome wyświetla ikonę „uszkodzony obraz”, co sugeruje, że src jest nieprawidłowym formatem.

Użyłem tej strony mozilla do informacji o kodowaniu / dekodowaniu base64:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding

Jakiś pomysł, co może być nie tak? Rozglądając się, mogę utworzyć stronę serwera obrazu z kodowaniem base64, ale czy można to zrobić po stronie klienta? Po pierwsze, strona serwera kodowania base64 oczywiście zwiększa rozmiar danych, a celem tego ćwiczenia jest zmniejszenie ilości danych przesyłanych z serwera, a także liczby żądań.

Dzięki, Nick

questionAnswers(6)

yourAnswerToTheQuestion