文件使用无服务器 api 成功上传到 s3,但未打开(已损坏)
Posted
技术标签:
【中文标题】文件使用无服务器 api 成功上传到 s3,但未打开(已损坏)【英文标题】:File uploaded successfully to s3 using serverless api but it doesn't open(corrupted) 【发布时间】:2020-07-17 22:21:33 【问题描述】:我有以下 ts 代码将来自 GraphQL API 的文件提交到我的 AWS S3 存储桶。
当我使用 nodejs http lib 运行项目时,它可以完美运行,但是当我使用 sls offline start
或从 aws lambda 函数运行它时,它会上传文件但无法打开(如损坏的文件) - 文本文件除外.
代码:
const fileStream = data.createReadStream()
const uploadParams =
Bucket: 'XXX',
Key: data.filename,
Body: fileStream,
ContentType: data.mimetype,
ContentEncoding: data.encoding,
ACL: 'public-read',
;
const result = await s3.upload(uploadParams).promise()
数据对象如下所示:
filename: '11083626_830419647032756_2338667058698516671_n.jpg',
mimetype: 'image/jpeg',
encoding: '7bit',
createReadStream: [Function: createReadStream]
我尝试将 createReadStream 转换为缓冲区并改用 s3.putObject() 函数,但仍然无法正常工作。
添加了以下配置以允许serverless.yml
中的二进制文件但仍然存在相同的问题:
provider:
apiGateway:
binaryMediaTypes:
- '*/*'
【问题讨论】:
【参考方案1】:添加后:
provider:
apiGateway:
binaryMediaTypes:
- '*/*'
或者在我的例子中只使用 'multipart/form-data' 而不是 '/'
它在 deploy 之后在 lambda AWS 中工作,但使用 sls offline start
仍然无法离线工作,这可能是他们代码中的错误,或者我应该添加额外的东西让它离线工作
【讨论】:
以上是关于文件使用无服务器 api 成功上传到 s3,但未打开(已损坏)的主要内容,如果未能解决你的问题,请参考以下文章
从上传到 S3 的文件触发的无服务器框架和 AWS Step Functions(AWS 状态机)