通过NodeJS将PDF上载到Firebase存储中,损坏的文件

时间:2019-05-29 16:59:53

标签: node.js firebase pdf upload storage

我使用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显示正确。

0 个答案:

没有答案