Javascript 不使用arraybuffer检索二进制数据

Javascript 不使用arraybuffer检索二进制数据,javascript,angularjs,Javascript,Angularjs,我有以下资源: 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 wi

我有以下资源:

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)};
            }
        }
    }
});
函数_arrayBufferToBase64(缓冲区){
var二进制=“”;
var字节=新的Uint8Array(缓冲区);
var len=字节数。字节长度;
对于(变量i=0;i
它所做的是从服务器接收文件的二进制内容,并返回一个包含base64数据的数据uri

我必须说,这个调用不能被url的简单src标记所取代,因为也发送了一些身份验证头

这在较新的浏览器中运行良好,但我希望与较旧的浏览器保持兼容性,因此arraybuffer在这里是一个问题,我的问题是:有没有一种方法可以在没有arraybuffer的情况下实现所有这些功能


我尝试删除响应类型,并使用所描述的内容转换resp.data中的字符串,但没有成功。

看一看。我还没有测试它们,但是有很多算法可以在字节数组和base64 URI之间进行转换。特别是
base64EncArray
函数似乎正是您所需要的。

您可能需要检查这个相关问题。其中的一些答案可能会帮助您找到解决方案。您可以将二进制存储在一个字符串中,您可以通过对循环中的每个字符进行位移位来处理unicode转换,这与打包AB.google“binary ajax”和查找旧示例非常相似。