【问题标题】:File uploaded successfully to s3 using serverless api but it doesn't open(corrupted)文件使用无服务器 api 成功上传到 s3,但未打开(已损坏)
【发布时间】: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:
            - '*/*'

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda graphql serverless-framework


    【解决方案1】:

    添加后:

    provider:
        apiGateway:
            binaryMediaTypes:
                - '*/*'
    
    • 或者在我的例子中只使用 'multipart/form-data' 而不是 '/'

    它在 deploy 之后在 lambda AWS 中工作,但使用 sls offline start 仍然无法离线工作,这可能是他们代码中的错误,或者我应该添加额外的东西让它离线工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-02
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多