首页 > 解决方案 > 如何使用无服务器将二进制文件(如图像)上传到 aws api 网关

问题描述

我正在使用无服务器框架来启动由 API 网关调用的 lambda 函数。我想将图像上传到 api 并将其写入 s3 存储桶。但是当我收到函数上的图像时,编码似乎有问题。

我已经尝试过(serverless-apigw-binary)但失败了。\

当前代码

const author = getUserName(this.head.ssid);
writeFile(author + "/" + this.head.title + "/index.jpg", this.img)
       .then(_ => {
            resolve(forMessage("Success"));
        }).catch(err => resolve(forError(err.toString())))

写入文件函数

import {S3} from "aws-sdk"

const s3 = new S3({accessKeyId: process.env["KEY"], secretAccessKey: process.env["SECRET"]});

export function writeFile(Key: string, Body: string | Buffer) {
    return new Promise((resolve, reject) => {
        s3.putObject({Key, Bucket: process.env["BUCKET_ARTICLE"], Body}, (err, data) => {
            if (err)
                reject(err);
            else
                resolve(data);
        })
    })
}

无服务器配置

plugins:
  - serverless-apigw-binary
  - serverless-offline

custom:
  apigwBinary:
    types:
      - 'image/jpeg'

functions:
  upload:
    handler: src/functions/upload.handler
    events:
      - http:
          path: upload
          method: post
          contentHandling: CONVERT_TO_BINARY
          cors:
            origins:
              - 'http://localhost:5000'
            headers:
              - MY_CUSTOM_HEADER
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token

我正在使用邮递员上传图片。

标签: node.jsamazon-web-servicesaws-api-gatewayserverless-frameworkserverless

解决方案


推荐阅读