我长期处于困境中。我正在尝试使用无服务器框架将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字符串问题。
感谢任何帮助,在此先感谢
答案 0 :(得分:0)
上传之前,不必将二进制缓冲区转换为字符串。
放下.toString('base64')
,其他所有操作都应该起作用。