1

我有一个前端,用户可以在其中上传文档(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 文档失败”。我不确定我做错了什么或如何解决这个问题。

4

1 回答 1

1

使用这个

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

代替

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

作品。

于 2020-11-19T09:27:48.483 回答