我使用nodejs为我的Firebase应用程序构建了一个管理面板。 现在,我想将pdf文件上传到firebase / google存储。
我的Javascript客户端,用于从计算机上传这些文件,如下所示:
$("#upload-pdf").on("change", function(e) {
file = e.target.files[0];
document.getElementById("pdfName").value = file.name;
if (file) {
var reader = new FileReader();
reader.readAsDataURL(e.target.files[0]);
reader.onload = function (event) {
var fileContent = reader.result;
$('#pdfPreview').attr('src', event.target.result);
document.getElementById("pdfContent").value = fileContent;
}
}
});
文件的图像内容(pdfContent的值)现在将通过ajax发送到我的nodejs服务器:
...
$.ajax({
url: '/editMenucard',
type: 'POST',
data: JSON.stringify(output),
contentType: 'application/json',
success: function(data) {
window.location.assign('/restaurant/overview');
}
// ...
}).catch(function(error) {
// Handle error
});
在我的nodejs服务器中,我实现了以下内容:
var bucket = admin.storage().bucket('myBucketName');
const contents = data.PDF.PDFContent;
mimeType = contents.match(/data:([a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+).*,.*/)[1];
fileName = data.PDF.PDFName + '-original.' + mimeTypes.detectExtension(mimeType);
base64EncodedPDFString = contents.replace("data:application\/pdf;base64,", '');
PDFBuffer = new Buffer.from(base64EncodedPDFString, 'base64');
const file = bucket.file('restaurant-menucards/' + fileName);
console.log(mimeType);
file.save(PDFBuffer, {
contentType: mimetype + ";charset=utf-8",
gzip : false,
metadata: { contentType: mimetype + ";charset=utf-8" },
public: true,
validation: 'md5'
}, function (error) {
if (!error) {
console.log("PDF successfully written")
}
});
该文件已成功上传到我的Firebase存储中,但是不幸的是,当我想打开它(或通过创建的签名URL将其嵌入到html视图中)时,此文件不起作用。
错误出现:
Fehler
Fehler beim Laden des PDF-Dokuments.
在英语中,它表示类似“错误;无法加载pdf文档”。
所以我认为我的PDF文件已损坏。我也在Safari中对其进行了测试,并且pdf也没有出现。
有什么问题,我上传的内容有误吗? 如您所见,我正在使用对象“文件”中的NodeJS方法“保存”。
有人对我有建议吗?
我在不同的浏览器上尝试过,但不起作用。 base64字符串未损坏。我在在线Base64-Converter中尝试过,并且pdf显示正确。