Small example demonstrating how to return binary files using the Serverless framework, in this case Excel files.
When testing, you may need to sls remove
and sls deploy
again - seems like the changes don't always reach AWS.
Want to return binary files in an existing project? Here's how:
- Install
serverless-apigw-binary
$ npm install --save-dev serverless-apigw-binary
- Add
serverless-apigw-binary
plugin inserverless.yml
plugins:
- serverless-webpack
+ - serverless-apigw-binary
- Add plugin configuration in
serverless.yml
plugins:
- serverless-webpack
- ...
- serverless-apigw-binary
+custom:
+ apigwBinary:
+ types:
+ - '*/*'
- Convert your binary file to base64
const binary: Buffer = ...;
const output = binary.toString('base64');
Or if you're also working with the xlsx
library, you can write directly to base64:
const output = XLSX.write(wb, { type: 'base64', bookType: 'xlsx' });
- Set
isBase64Encoded: true
and set theContent-Type
andContent-Disposition
headers on the response
export const xlsx: Handler = (event: APIGatewayEvent, context: Context, cb: Callback) => {
const response = {
statusCode: 200,
body: output,
headers: {
'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'Content-Disposition': 'attachment; filename="hello.xlsx"',
},
isBase64Encoded: true,
};
cb(null, response);
}