2014-02-17 65 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)}; 
      } 
     } 
    } 
}); 

它的作用是接收來自服務器的文件的二進制內容,並與內部的base64數據返回的數據URI。

我不得不說,這個調用不能用一個簡單的src標籤替換爲url,因爲有一些驗證頭也發送了。

這在新的瀏覽器中正常工作,但我想保持與舊瀏覽器的兼容性,所以arraybuffer是一個問題在這裏,我的問題是:有沒有辦法做到所有這些沒有arraybuffer?

我試圖刪除響應類型,並使用描述here但沒有成功,在resp.data中轉換字符串。

+1

你可能想檢查這個相關的問題。有些答案可能會幫助您找到解決方案。 http://stackoverflow.com/questions/20617720/why-doesnt-the-browser-reuse-the-authorization-headers-after-an-authenticated-x – Sylvain

+1

你可以存儲二進制字符串中的你處理unicode轉換對每個字符進行循環位移,就像你用來打包AB一樣。谷歌「二進制ajax」,並尋找舊的例子。 – dandavis

回答

2

看看​​。我沒有測試過它們,但是有很多用於在字節數組和base64 URI之間轉換的算法。特別是base64EncArray函數似乎是你正在尋找的。

相關問題