Ben*_*ers 7 aws-api-gateway serverless-framework aws-serverless
我有一个无服务器的应用程序,它将文件上传到s3(通过POST请求)并为它们提供服务(通过GET请求)
我正在使用serverless-apigw-binary和serverless-apigwy-binary插件允许我以图像的形式返回二进制数据.为了允许URL与浏览器一起使用,我必须将二进制类型设置为*/*.
为了上传图像,POST端点采用类似{"base64":"..."}的正文.但是,使用此配置,整个主体将作为base64编码的字符串传递.如何防止请求体application/json被转换?
见serverless.yml下文:
service: image-service
custom:
envName: ${opt:stage, self:provider.stage}
domains:
prod: api.<mydomain>
dev: dev-api.<mydomain>
customDomain:
basePath: images
domainName: ${self:custom.domains.${self:custom.envName}}
certificateName: "*.<mydomain>"
apigwBinary:
types:
- '*/*'
provider:
name: aws
runtime: nodejs8.10
region: eu-west-1
memorySize: 1536
role: ImageRenderingRole
environment:
ENV_NAME: ${self:custom.envName}
APP_NAME: image-service
BUCKET: <mybucket>
plugins:
- serverless-offline
- serverless-domain-manager
- serverless-apigw-binary
- serverless-apigwy-binary
functions:
uploadImage:
handler: handler.uploadImage
events:
- http:
path: /
method: POST
getImage:
handler: handler.getImage
events:
- http:
path: 'images/{idAndFormat}'
method: get
contentHandling: CONVERT_TO_BINARY
parameters:
paths:
idAndFormat: true
Run Code Online (Sandbox Code Playgroud)
您有两个选择:
停止*/*用作类型选择器。这将所有内容都视为二进制,因此对所有内容进行 base64 编码。不幸的是,您无法表达规则的例外,只能表达遵循规则的事物。您可以添加必须被视为二进制的类型的完整列表,但这对我来说听起来很脆弱。
只需接受 base64 JSON 并在另一侧取消 base64。这似乎最简单。您正在使用节点,它看起来像,并且有很多关于此的教程。当然,它增加了一些步骤和一些膨胀,但老实说,您正在使用 API Gateway 和 Lambda(它们是不错的工具,但是......)所以很明显,这里的性能不必调整到毫秒.
| 归档时间: |
|
| 查看次数: |
1023 次 |
| 最近记录: |