无服务器上传文件到S3无法打开

时间:2018-07-20 16:09:39

标签: amazon-s3 aws-lambda serverless

我正在尝试使用无服务器(Node.js)进行文件上传

const contentType = event.headers['Content-Type'] || event.headers['content-type'];
const bb = new busboy({ headers: { 'content-type': contentType }});

// When file load
bb.on('file', function (fieldname, file, filename, encoding, mimetype) {
    console.log(fieldname, filename, encoding, mimetype);
    console.log(file);

    const key = 'upload/' + filename;
    var s3obj = new AWS.S3({
        params: {
            Bucket: 'fileupload',
            Key: key,
            ACL: 'public-read',
            ContentEncoding: encoding,
            ContentType: mimetype,
        }
    });

    s3obj.upload({ Body: file })
      .on('httpUploadProgress', function(evt) { console.log(evt); })
      .send(function(err, data) { console.log(err, data) });

})

bb.end(event.body);

callback(null, response({ status: 'success' }));

运行此代码后,S3成功创建了文件,但是如果我上传了图像或其他非文本文件(不是.txt,.csv),则文件大小会有所不同,并且无法打开文件。

我可以知道代码的哪一部分出错了吗?

2 个答案:

答案 0 :(得分:0)

发现需要

Add multipart/form-data binary media type

在API网关下获取文件的正确编码。

我已经关注了这个插件

https://github.com/myshenin/aws-lambda-multipart-parser

解决这个问题。

答案 1 :(得分:0)

尝试上传图片时遇到了同样的问题。解决方案是在存储桶设置中启用二进制媒体类型。

我将媒体类型设置为*/*