我正在將我的NodeJS項目遷移到API網關,我無法弄清楚如何從Lambda下載文件。API網關響應使用節點下載文件,PDF製作,無服務器
這是我本地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。
這是我使用無服務器的lambda函數的一個片段。
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去管參考響應對象。那可能嗎?有另一種方法嗎?
更新
我最終通過返回在客戶端上的JSON響應和對編碼的二進制PDF以base64解決這一問題。 注意:在響應映射模板中使用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