Docx Documentless Server3 S3错误,而Putobject方法

时间:2019-02-11 16:58:37

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

我长期处于困境中。我正在尝试使用无服务器框架将docx文件上传到S3 bucket

我成功地将docx文档上传到S3存储桶。但是,当我从S3打开文档时发生了什么。该文档包含转换为base64字符串的缓冲区数据。即大约23页的大字符串。

docx已损坏。

我的代码

exports.putFile = async(event) =>{
  try {
    var bitmap = fs.readFileSync('./test.docx');
    let bufferValue = new Buffer(bitmap).toString('base64');
    const valueFromBucket = await S3.putObject(
        { Body: bufferValue, 
          Bucket: '********', 
          Key: '*****.docx',
          ContentType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
          ContentDisposition: 'attachment',
          ContentEncoding: 'base64'
          }).promise();
    return{
      statusCode: 200,
      body: JSON.stringify(valueFromBucket)
    }
  }catch(err){
    return {
      statusCode: err.statusCode || 400,
      body: err.message || JSON.stringify(err.message)
    }
  }
}

Serverless.yml

service: node11

custom:
  bucket: ******

provider:
  name: aws
  runtime: provided # set to provided
  stage: dev
  region: *****
  iamRoleStatements:
    - Effect: Allow
      Action:
        - s3:*
        - ses:SendEmail
        - ses:SendRawEmail
      Resource: "*"

functions:
  hello:
    handler: handler.*****
    memorySize: 1024
    events:
      - http:
          path: /
          method: get
    layers: # add layer
      - arn:aws:lambda:us-east-1:553035198032:layer:nodejs11:3
  putFile:
    handler: handler.*****
    description: put Object using S3 service.
    memorySize: 1024
    timeout: 5
    events:
      - http:
          path: putfile
          method: post
          integration: lambda
          cors: true
    layers: # add layer
      - arn:aws:lambda:us-east-1:553035198032:layer:nodejs11:3

我认为代码几乎可以正常工作,但是此问题包含在上载文档中的base 64字符串问题。

感谢任何帮助,在此先感谢

1 个答案:

答案 0 :(得分:0)

上传之前,不必将二进制缓冲区转换为字符串。 放下.toString('base64'),其他所有操作都应该起作用。