我在 Angular JS 环境中使用 ajax 来调用本地文件(pdf 文件)。调用成功,但是ajax调用返回的数据是乱码(不确定我这里使用的术语是否正确,但就像使用文本编辑器打开pdf文件一样)。无论如何,我可以得到 base64 字符串的返回结果吗?
这背后的原因是与一些现有的 pdf 合并,但在此之前,我需要 pdf 的 base64 字符串。下面是我的ajax调用代码,
$.ajax({
url : 'path/to/pdfFile.pdf',
success : function(data) {
console.log(data); //expecting base64 string here
},
error: function(xhr, textStatus, errorThrown){
console.log('request failed');
},
async : false
});
我设法将pdf文件(乱码)转换为base64字符串,正确的定义应该是将二进制文件转换为base64。
以下是答案,感谢@DaTebe 和来自以下的参考答案:
使用 Javascript 检索二进制文件内容,对其进行 base64 编码并使用 Python 对其进行反向解码 https://stackoverflow.com/questions/7370943/retrieving-binary-file-content-using-javascript-base64-encode-it-and-reverse-de
答案,
-
首先,编写两个方法来从引用的答案进行转换
function base64Encode(str) {
var CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var out = "", i = 0, len = str.length, c1, c2, c3;
while (i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if (i == len) {
out += CHARS.charAt(c1 >> 2);
out += CHARS.charAt((c1 & 0x3) << 4);
out += "==";
break;
}
c2 = str.charCodeAt(i++);
if (i == len) {
out += CHARS.charAt(c1 >> 2);
out += CHARS.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += CHARS.charAt((c2 & 0xF) << 2);
out += "=";
break;
}
c3 = str.charCodeAt(i++);
out += CHARS.charAt(c1 >> 2);
out += CHARS.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
out += CHARS.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
out += CHARS.charAt(c3 & 0x3F);
}
return out;
}
function getBinary(file){
var xhr = new XMLHttpRequest();
xhr.open("GET", file, false);
xhr.overrideMimeType("text/plain; charset=x-user-defined");
xhr.send(null);
return xhr.responseText;
}
-
要使用它,只需:
var b = get Binary('path/to/pdf File.pdf');
var b64 = base64Encode(b);
控制台.log(b64);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)