moh*_*nag 7 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 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)};
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
它的作用是从服务器接收文件的二进制内容,并返回带有base64数据的数据uri.
我不得不说这个调用不能被简单的src标记替换为url,因为还有一些身份验证头也被发送.
这在新的浏览器中运行良好,但我想保持与旧浏览器的兼容性,所以这里的arraybuffer是一个问题,我的问题是:有没有办法在没有arraybuffer的情况下完成所有这些?
我尝试删除响应类型并使用此处描述的转换resp.data中的字符串,但没有成功.
看看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding。我还没有测试过它们,但是有许多算法可以在字节数组和 base64 URI 之间进行转换。特别是该base64EncArray功能似乎正是您正在寻找的功能。