У меня есть следующий ресурс:Получить двоичные данные без использования ArrayBuffer
function _arrayBufferToBase64(buffer) {
var binary = '';
var bytes = new Uint8Array(buffer);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[ i ]);
}
return window.btoa(binary);
}
var API = $resource(server + 'album', {}, {
get: {
url: server + 'album/:albumId/photo/:photoId',
method: 'GET',
responseType: 'arraybuffer',
headers: {
'AuthToken': 'the secret',
'Accept': 'image/*'
},
interceptor: {
response: function(resp) {
return 'data:'+ resp.headers('Content-Type') + ';base64,' + _arrayBufferToBase64(resp.data)};
}
}
}
});
, что он делает это, чтобы получить содержимое двоичного файла с сервера и возвращает URI данных с данными base64 внутри.
Я должен сказать, что этот вызов не может быть заменен простым тегом src на URL-адрес, поскольку также отправляются некоторые заголовки аутентификации.
это прекрасно работает в новых браузерах, но я хочу сохранить совместимость со старыми браузерами, поэтому проблема с массивом здесь проблема, мой вопрос: есть ли способ сделать все это без arraybuffer?
Я попытался удалить тип ответа и преобразовать строку в resp.data, используя то, что описано here, но не удался.
Возможно, вы захотите проверить этот родственный вопрос. Некоторые из ответов могут помочь вам решить проблему. http://stackoverflow.com/questions/20617720/why-doesnt-the-browser-reuse-the-authorization-headers-after-an-authenticated-x – Sylvain
вы можете сохранить двоичный код в строке, в которой вы обрабатываете преобразование юникода, бит-сдвиг каждого символа в цикле, как и вы, чтобы упаковать AB. google "binary ajax" и искать старые примеры. – dandavis