Я в процессе миграции моего проекта NodeJS в Gateway API, и я не могу понять, как загрузить файл из Lambda.API Gateway Response Загрузить файл с помощью Node, PDFMake, Serverless
Вот фрагмент кода ответа в моем локальном проекте Node.
app.get('/downloadPDF', function (req, res) {
res.setHeader('Content-disposition', 'attachment; filename=test.pdf');
res.setHeader('Content-type', 'application/pdf');
var PdfPrinter = require('pdfmake');
var printer = new PdfPrinter(fonts);
var pdfDoc = printer.createPdfKitDocument(dd);
pdfDoc.pipe(res);
pdfDoc.end();
});
Трубопровод к ответу Я смог вернуть PDF.
Вот фрагмент моей лямбда-функции с использованием безсервера.
module.exports.createPDF = (event, context) => {
var PdfPrinter = require('pdfmake');
var printer = new PdfPrinter(fonts);
var pdfDoc = printer.createPdfKitDocument(dd);
pdfDoc.pipe(res);
pdfDoc.end();
}
Вот конечная точка в моей serverless.yml
createPDF:
handler: functions.myFunction
events:
- http:
path: services/getPDF
method: get
response:
headers:
Content-Type: "'application/pdf'"
Content-disposition: "'attachment; filename=test.pdf'"
Я не знаю, как получить ссылку на объект ответа в Lambda для трубы. Это возможно? Есть ли другой способ?
Update
Я в конечном итоге решить эту проблему, возвращая в формате base64 PDF двоичная в ответ JSON и декодирования на клиенте. Примечание: использование декодирования base64 в шаблоне сопоставления ответов не помогло.
Пример кода:
var buffers = [];
pdfDoc.on('data', buffers.push.bind(buffers));
pdfDoc.on('end', function() {
var bufCat = Buffer.concat(buffers);
var pdfBase64 = bufCat.toString('base64');
return cb(null,
{"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": pdfBase64});
});
Спасибо за предложение! К сожалению, у меня не было успеха, идущего по этому маршруту, но он дает мне некоторый опыт работы с шаблонами сопоставления ответов. – Padawan