Тип файла неизвестен (application / octet-stream) не поддерживается, Sendgrid node js файл не может прочитать - PullRequest
0 голосов
/ 19 марта 2020

Привет, ребята, спасибо за ваше время, у меня есть эти проблемы, когда я генерирую файл pdf с помощью pdfkit и отправляю их с помощью sendgrid в node js, электронная почта была успешно отправлена, но файл, кажется, поврежден, когда я пытался открыть файл в электронной почте, однако, если я открою файл, который сохраняю локально, работаю нормально (pdf отформатирован так, как и предполагалось),

здесь позвольте мне показать мой код:

    await dbTransaction
        .create(result)
        .then(async (data) => {
            const doc = new PDFdocument({
                size: 'A4',
                margin: {
                    right: 25,
                    left: 25,
                },

            });

            const table = new PDFtable(doc, {
                bottomMargin: 5,
            });

            if (result.is_round_trip === false) {
                const dateNow = moment().format('DD MMMM YYYY');


                table
                    .addPlugin(new (VoilabTable)({
                        column: 'Item',
                    }))
                    .addColumns([
                        {
                            id: 'Item',
                            // header: 'Name',
                            Align: 'left',
                            width: 250,
                        },
                        {
                            id: 'Separator',
                            // header: 'Name',
                            Align: 'center',
                            width: 10,
                        },

                        {
                            id: 'Description',
                            // header: 'Description',
                            align: 'left',
                            width: 250,
                        },

                    ]);


                doc.pipe(fs.createWriteStream(`${__dirname}/../../../polis_generate_temp/${result.customer_name.pdf`));
                doc.moveUp(5);
                doc.image('sompo_hd.png', {
                    fit: [150, 100],
                    align: 'left',
                })
                    .moveDown(2.5);


                doc.end();
                transData = data;
            }

выше, я создаю свой pdf файл

и вот код для отправки моей электронной почты


            sgMail.setApiKey(example_key);


            const pdfFolder = fs.readdirSync(`${__dirname}/../../../polis`);
            const msg = {
                to: 'example@gmail.com',
                from: 'example@mail.id',
                subject: 'example subject',
                text: 'dev',
                attachments: [],
            };
            const attachMail = {
                content: `${__dirname}/../../../polis/file.pdf`,
                filename: `file.pdf`,
                type: 'application/pdf',
                disposition: 'attachment',
            };
            msg.attachments.push(attachMail);

            await sgMail.send(msg)
                .then(() => {
                    setContent(200, transData);
                    return res.status(200).json(getContentSuccess());
                })
                .catch((err) => {
                    setContent(500, errorCode.General.SYSTEM_ERROR);
                    return res.status(500).json(getContentFail(req, err));
                });

, как вы можете видеть, я поставил сценарий sendgript после обещания dbTransaction, уже пытался установить один уровень, как транзакция и использование asyn c -wait, но это не работает, я подозреваю, что pdf-комплект не был готов к записи файла, и sendgrid все равно отправил их.

спасибо за ваше время за любые предложения и замечания от вас где очень ценно для меня. спасибо

...