[英]Ajax call to return PDF file as base64 string
我在有角度的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对其进行反解码
答案,
首先,根据参考答案编写两种转换方法
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 = getBinary('path / to / pdfFile.pdf');
var b64 = base64Encode(b);
console.log(b64);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.