不使用ArrayBuffer检索二进制数据

7

我有以下资源:

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的情况下完成所有这些操作?
我尝试删除响应类型并使用resp.data中描述的方法在此处转换字符串,但未成功。

1
你可能想要查看这个相关的问题。那里的一些答案可能会帮助你找到解决方案。https://dev59.com/OGIj5IYBdhLWcg3wHhtX - Sylvain
1
如果您处理Unicode转换并通过循环位移每个字符,就可以将二进制存储在字符串中,就像打包AB一样。请搜索“二进制Ajax”并查找旧的示例。 - dandavis
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接