Я создаю админ-панель для своего приложения Firebase с помощью nodejs.
Теперь я хочу загрузить файл 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;
}
}
});
imagecontent файла (значение pdfContent) теперь будет отправлено на мой сервер nodejs через ajax:
...
$.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, но, к сожалению, когда я хочу открыть его (или внедрить его в мое представление HTML через подписанный URL, для которого я создал), он не работает.
Появляется ошибка:
Fehler
Fehler beim Laden des PDF-Dokuments.
На английском языке это означает что-то вроде «Ошибка; не удалось загрузить документ PDF».
Так что я думаю, что мой PDF-файл поврежден. Я также протестировал его в Safari, и PDF тоже не появился.
Есть что-нибудь, я делаю неправильно с моей загрузкой?
Я использую, как видите, метод NodeJS «сохранить» из объекта «файл».
У кого-нибудь есть предложения для меня?
Я пробовал в разных браузерах, и это не работает.
Строка base64 не повреждена. Я попробовал это в онлайн Base64-конвертере, и PDF показал правильно.