无法在Lambda + S3上加载图像

时间:2017-07-26 05:38:24

标签: lambda single-page-application aws-api-gateway

我创建单页应用程序(使用Angular)并部署到Lambda + APIGateway + S3以通过服务器端呈现(是SEO友好并使用Express.js)。 应用程序的基本功能,动态呈现DOM以及加载样式和路由,但图像(PNG,JPEG)不能正常加载,不包括SVG文件。

对加载图像的请求响应有200个状态代码,但图像为空且为0KB。

enter image description here

我该怎么办? 我尝试将*/*添加到AWS APIGateway的二进制媒体类型,并确认在S3存储桶中存在图像。

1 个答案:

答案 0 :(得分:3)

服务器上的代码(例如Node.js)拒绝二进制文件,所以修复它,然后它可以正常工作。

有关详情

首先,最重要的是设置接受二进制媒体类型。

我使用无服务器框架来部署此项目,但在部署时会更改二进制媒体类型,因此请使用“serverless-apigw-binary”npm包。

// serverless.yml
...
plugins:
  - "serverless-apigw-binary"
custom:
  apigwBinary:
    types:
      - "*/*"
...

还在项目入口点设置媒体类型。

// app.js
...
const awsServerlessExpress = require("aws-serverless-express");
const binaryMimeTypes = ["image/jpeg", "image/png", ...];
const server = awsServerlessExpress.createServer(app, undefined, binaryMimeTypes);

export const universal = (event, context) => {
  awsServerlessExpress.proxy(server, event, context);
};