Docx Document Server S3 Ошибка при использовании метода Putobject - PullRequest
0 голосов
/ 11 февраля 2019

Я застрял в ситуации надолго.Я пытаюсь загрузить файл docx в корзину S3, используя Serverless Framework

. Я успешно загрузил документ docx в корзину S3. Но что случилось, когда я открыл документ из S3.Документ содержал данные буфера, преобразованные в строку base64.т.е. большая строка около 23 страниц.

Документ был поврежден.

МОЙ код

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 голосов
/ 11 февраля 2019

Нет необходимости преобразовывать двоичный буфер в строку перед загрузкой.Бросьте .toString('base64'), все остальное должно работать.

...