gpt4 book ai didi

aws-api-gateway - 无服务器 API 网关将请求转换为 base64

转载 作者:行者123 更新时间:2023-12-04 12:39:03 25 4
gpt4 key购买 nike

我有一个无服务器应用程序,它将文件上传到 s3(通过 POST 请求)并为它们提供服务(通过 GET 请求)

我正在使用 serverless-apigw-binaryserverless-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

最佳答案

您有两个选择:

  • 停止使用 */*作为类型选择器。这将所有内容都视为二进制,因此对所有内容进行 base64 编码。不幸的是,您无法表达规则的异常(exception),只能表达遵循规则的事物。您可以添加必须被视为二进制的类型的完整列表,但这对我来说听起来很脆弱。
  • 只需接受 base64 JSON 并在另一侧取消 base64。这似乎最简单。您正在使用节点,它看起来像,并且有很多关于此的教程。当然,它增加了一些步骤和一些膨胀,但老实说,您正在使用 API Gateway 和 Lambda(它们是不错的工具,但是......)所以很明显,这里的性能不必调整到毫秒.
  • 关于aws-api-gateway - 无服务器 API 网关将请求转换为 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52479994/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com