繁体   English   中英

Ajax调用以将PDF文件作为base64字符串返回

[英]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对其进行反解码

答案,

  1. 首先,根据参考答案编写两种转换方法

     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; } 
  2. 要使用它,只需使用:

    var b = getBinary('path / to / pdfFile.pdf');
    var b64 = base64Encode(b);
    console.log(b64);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM