Javascript 将PDF编码为Base64字符串并使用Node.js Buffer.from()会导致文件损坏
我有一个前端,用户可以上传文档(PDF)。它将这些PDF转换为Base64字符串,然后将其发送到microservice,并将其上载到Backblaze B2。此方法在上载例如Javascript 将PDF编码为Base64字符串并使用Node.js Buffer.from()会导致文件损坏,javascript,node.js,pdf,base64,backblaze,Javascript,Node.js,Pdf,Base64,Backblaze,我有一个前端,用户可以上传文档(PDF)。它将这些PDF转换为Base64字符串,然后将其发送到microservice,并将其上载到Backblaze B2。此方法在上载例如.jpg文件时工作正常,但在使用.pdf文件进行尝试时,我在Backblaze网站上浏览文件时无法打开此方法: 这是我的前端代码: export const toBase64 = (file: File | Blob) => new Promise((resolve, reject) => { c
.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文档”。我不知道我做错了什么,也不知道如何解决这个问题。使用这个
base64String.replace(/^data:.+;base64,/, "")
而不是
base64String.replace(/^data:image\/(png|gif|jpeg|jpg|pdf);base64,/, "")
有效。pdf的mimetype
应用程序不是/pdf
?您的.replace()
正在尝试替换image/pdf
。我很惊讶.from()
没有对此抛出异常。