2014-02-17 3 views
7

У меня есть следующий ресурс:Получить двоичные данные без использования 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, но не удался.

+1

Возможно, вы захотите проверить этот родственный вопрос. Некоторые из ответов могут помочь вам решить проблему. http://stackoverflow.com/questions/20617720/why-doesnt-the-browser-reuse-the-authorization-headers-after-an-authenticated-x – Sylvain

+1

вы можете сохранить двоичный код в строке, в которой вы обрабатываете преобразование юникода, бит-сдвиг каждого символа в цикле, как и вы, чтобы упаковать AB. google "binary ajax" и искать старые примеры. – dandavis

ответ

Смежные вопросы