Загрузка pdf в хранилище firebase через NodeJS, поврежденный файл - PullRequest
0 голосов
/ 29 мая 2019

Я создаю админ-панель для своего приложения 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 показал правильно.

...