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

gijlo24d  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(210)

我正在通过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响应中获得的纯文本?

  • 来自API的响应(复制此文本并将其粘贴到在线转换器上可获得正确的PDF)

  • console.log(data)的输出。为什么我不认为它只是类似于API响应的纯文本?

xj3cbfub

xj3cbfub1#

您应该使用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();
  });

相关问题