在 AJAX 响应中解码 base64 字符串 (PDF)

问题描述 投票:0回答:1

我正在通过 jQuery AJAX 调用调用

/download
端点。来自端点的响应是 base64 字符串。当我复制此响应并将其粘贴到在线 base64 到 PDF 转换器时,我得到了所需的 PDF 文件。然而,通过下面的代码访问它会稍微调整字符串,这使得 PDF 只是一个空白文档。

$.ajax({
    type: "POST",
    url: "/download",
    data: JSON.stringify(postData),
    contentType: "application/json",
    encode: true,
})
    .done(function (data) {
        window.open("data:application/pdf;base64," + Base64.encode(data));
    })
    .fail(function (err) {
        $('.toast-header strong').html('Download Error');
        $('.toast-body').html('An error occured while downloading the file.');
        let toast = new bootstrap.Toast($('#liveToast'));
        toast.show();
    });

我尝试过访问不同的方法来访问

data
data.toString()
或者简单地使用
data
变量而不是将它传递给
Base64.encode()
函数没有运气。我怎样才能简单地使用从 API 响应中获得的纯文本?

javascript jquery ajax base64
1个回答
0
投票

您应该使用 JavaScript 中内置的 btoa() 函数来编码 base64 字符串,而不是使用 Base64.encode() 函数。

$.ajax({
  type: "POST",
  url: "/download",
  data: JSON.stringify(postData),
  contentType: "application/json",
  encode: true,
})
  .done(function (data) {
    window.open("data:application/pdf;base64," + btoa(data));
  })
  .fail(function (err) {
    $('.toast-header strong').html('Download Error');
    $('.toast-body').html('An error occurred while downloading the file.');
    let toast = new bootstrap.Toast($('#liveToast'));
    toast.show();
  });

© www.soinside.com 2019 - 2024. All rights reserved.