如何使用节点在AWS上保存图像

时间:2018-02-02 10:26:48

标签: javascript node.js amazon-web-services amazon-s3

我使用node.js并且希望在base64中添加我收到的图像的aws。一切顺利并加载它们但是当我打开它时它会给我一个错误,告诉我我的错误形式。如何获取图像链接以将其存储在数据库中?

base64表格:

data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/......

上传图片的功能:

const s3 = new aws.S3({ params: { Bucket: process.env.S3_BUCKET } });
                    let data = this.createData(req.body.image);
                    s3.putObject(data, (err, response) => {
                        if (err) {
                            console.log(err);
                        }
                        else {
                            console.log(response)
                            /*tmp = task
                                .update(req.body)
                                .then(() => res.status(200).send(JSON.stringify(task.id_creator)))
                                .catch(error => res.status(400).send(error));*/
                        }
                    })

createData(image) {
    //TODO NOME CARTELLA
    let data = {
        Key: 'test1',
        Body: image,
        ContentEncoding: 'base64',
        ContentType: 'image/jpeg'
    };
    return data;
}

一切都很顺利,回应是:

{ ETag: '"20eaa681c71825d8f57472eb378be651"',
VersionId: 'kjQCDdfoq5H0Clhbs79SU4JiIUq8BgOn' }

但是如果我下载图片时我在我的存储桶中进入s3控制台会给我一个错误('格式错误')

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案: 我刚刚添加了

let buf = new Buffer(req.body.image.replace(/^data:image\/\w+;base64,/, ""),'base64');

并将buf作为数据发送。 我添加了一个ACL参数:

createData(image) {
    //TODO NOME CARTELLA
    let data = {
        Key: 'test1',
        Body: image,
        ContentEncoding: 'base64',
        ContentType: 'image/jpeg',
        ACL: 'public-read'
    };
    return data;
}