我正在向 salesforce 查询一些附件数据,它以二进制格式返回数据。
我曾尝试将其转换为 base64,但到目前为止我一直很不成功。我尝试了 btoa()
方法,但它返回 The string to be encoded contains characters outside the Latin1 range.
错误。
我尝试使用 fileReader 方法,即 readAsDataURL()
,它返回 base64 字符串,但遗憾的是它不代表图像。
能否请你帮我看看如何将数据的二进制形式转换为base64编码的字符串?
编辑
最终,我想用我无法做到的数据在网页上显示图像
如果您从服务器检索该图像,您可以选择从服务器转换为 base64(并准备好提供给客户端),或者您需要从服务器传递图像的 URL,然后读取它并从客户端 javascript 转换为 base64。但是,如果您从服务器检索该二进制文件到客户端,客户端将无法解析它,因为数据由于错误的发送方法而损坏。
将 URL 转换为 base64 的示例(使用 Canvas 或 FileReader):
function convertImgToDataURLviaCanvas(url){
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function(){
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL("image/png");
canvas = null;
};
img.src = url;
}
function convertFileToDataURLviaFileReader(url){
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = function() {
var reader = new FileReader();
reader.onloadend = function () {
console.log(reader.result);
}
reader.readAsDataURL(xhr.response);
};
xhr.open('GET', url);
xhr.send();
}
转换 fiddle :
http://jsfiddle.net/handtrix/yvq5y/