【发布时间】: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