Je suis en train de migrer mon projet NodeJS vers API Gateway et je n'arrive pas à comprendre comment télécharger un fichier à partir de Lambda.API Gateway Response Télécharger le fichier à l'aide de Node, PDFMake, Serverless
Voici un extrait du code de réponse sur mon projet de nœud local.
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();
});
Piping à la réponse, j'ai été en mesure de récupérer un fichier PDF.
Voici un extrait de ma fonction lambda utilisant serverless.
module.exports.createPDF = (event, context) => {
var PdfPrinter = require('pdfmake');
var printer = new PdfPrinter(fonts);
var pdfDoc = printer.createPdfKitDocument(dd);
pdfDoc.pipe(res);
pdfDoc.end();
}
Voici le point final dans mon 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'"
Je ne sais pas comment obtenir référence à l'objet de réponse dans Lambda à la conduite à. Est-ce possible? Y a-t-il un autre moyen?
Mise à jour
J'ai fini par résoudre ce problème en renvoyant les base64 binaires PDF codées dans une réponse JSON et le décodage sur le client. Remarque: l'utilisation du décodage base64 dans le modèle de mappage de réponse ne fonctionnait pas.
Exemple de code:
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});
});
Merci pour la suggestion! Malheureusement, je n'ai pas réussi à suivre cette route, mais cela m'a donné de l'expérience avec les modèles de cartographie de réponse. – Padawan