【问题标题】:Uploading image file to S3 using API gateway NodeJS使用 API 网关 NodeJS 将图像文件上传到 S3
【发布时间】:2022-01-25 18:33:19
【问题描述】:

我正在尝试使用 API Gateway 将图像文件上传到 S3。所以这是一个 POST 方法,主体使用form-data 获取图像文件。我在 lambda-multipart-parser 的帮助下用 TypeScript 编写了 lambda。它在本地运行良好,但是当我在 AWS 中部署它时,文件大小发生了一些变化,并且似乎原始文件没有真正正确上传。

我的 lambda 代码是

import * as parser from 'lambda-multipart-parser'
import { s3Upload } from '../helper/common'

export const test = async (event) => {
  console.log('starting------')
  console.log('EVENT', event)
  const result = await parser.parse(event)
  console.log(result.files)
  const file = result.files[0]
  console.log('FILE', file)

  const s3Params = {
    Bucket: process.env.AWS_BUCKET,
    Key: `${Date.now().toString()}-${file.filename}`,
    Body: file.content,
    ContentType: 'image/png',
    ACL: 'public-read',
  }
  console.log('S3 PARAMS', s3Params)
  const s3Content = await s3Upload(s3Params)
  console.log('S3 CONTENT', s3Content)
}

我只是从helper 调用s3Upload

import { S3 } from 'aws-sdk'

export const s3Upload = async function (params) {
  let s3: S3
  if (process.env.IS_OFFLINE) {
    s3 = new S3({
      accessKeyId: process.env.AWS_ACCESS_KEY,
      secretAccessKey: process.env.AWS_SECRET_KEY,
    })
  }
  return new Promise((resolve) => {
    s3.upload(params, (err, data) => {
      if (err) {
        console.error(err)
        resolve(err)
      } else {
        resolve(data)
      }
    })
  })
}

这看起来像是节点包本身的问题,但我不确定!我可以实现这个目标的其他工作方式是使用 typescript 编写的 API 网关将图像文件上传到 S3?

【问题讨论】:

    标签: typescript amazon-s3 file-upload aws-lambda aws-api-gateway


    【解决方案1】:

    可能是因为该模块没有包含在lambda中,尝试做npm init并将包安装在lambda或其他选项所在的文件夹中,并且最好创建一个层并将在那里打包。

    这里是文档:https://docs.aws.amazon.com/cdk/api/v1/docs/aws-lambda-readme.html#layers

    【讨论】:

      猜你喜欢
      • 2019-12-13
      • 2019-05-27
      • 2019-09-07
      • 2017-03-22
      • 2016-01-30
      • 2015-03-17
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      相关资源
      最近更新 更多