【问题标题】:Encoding PDF to Base64 string and using Node.js Buffer.from() results in broken file将 PDF 编码为 Base64 字符串并使用 Node.js Buffer.from() 导致文件损坏
【发布时间】:2020-11-19 09:11:44
【问题描述】:

我有一个用户可以上传文档 (PDF) 的前端。它将这些 PDF 转换为 Base64 字符串,然后将其发送到微服务,然后上传到 Backblaze B2。此方法在上传时工作正常,例如.jpg 文件,但是在尝试使用 .pdf 文件时,在 Backblaze 的网站上浏览文件时,我无法打开它:

这是我的前端代码:

export const toBase64 = (file: File | Blob) =>
  new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = (error) => reject(error);
  });

...

const base64String = await toBase64(acceptedFiles[index]);
onSelectFile(base64String as string);

这是我的后端代码:

const { base64String, fileName } = request.body.input;

const fileBuffer = Buffer.from(
  base64String.replace(/^data:image\/(png|gif|jpeg|jpg|pdf);base64,/, ""),
  "base64"
);

const getUploadUrlResponse = await b2.getUploadUrl({
  bucketId: process.env.BACKBLAZE_BUCKET_ID || "bucketId",
});

const uploadFileResponse = await b2.uploadFile({
  uploadUrl: getUploadUrlResponse.data.uploadUrl,
  uploadAuthToken: getUploadUrlResponse.data.authorizationToken,
  fileName: fileName,
  data: fileBuffer,
  mime: "application/pdf",
});

正如我所说,这在上传 .jpg 时可以正常工作,但在使用 .pdf 时会导致“加载 PDF 文档失败”。我不确定我做错了什么或如何解决这个问题。

【问题讨论】:

  • pdf的mimetype不是application/pdf吗?您的 .replace() 正在尝试替换 image/pdf。我很惊讶.from() 没有对此抛出异常。

标签: javascript node.js pdf base64 backblaze


【解决方案1】:

使用这个

base64String.replace(/^data:.+;base64,/, "")

而不是

base64String.replace(/^data:image\/(png|gif|jpeg|jpg|pdf);base64,/, "")

有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 2019-02-16
    相关资源
    最近更新 更多