文件使用无服务器 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,但未打开(已损坏)的主要内容,如果未能解决你的问题,请参考以下文章