Serving binary files

Small example showing how to serve binary files using Serverless on AWS with the serverless-apigw-binary plugin, using generated Excel files as an example

View on Github


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 in serverless.yml
   - serverless-webpack
+  - serverless-apigw-binary
  • Add plugin configuration in serverless.yml
  - serverless-webpack
  - ...
  - serverless-apigw-binary

+  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 the Content-Type and Content-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);