我使用带有mongoDB数据库的node.js中的AWS Lambda在AWS S3中上传图像我使用以下代码使用aws s3上传图像:
var fs = require('fs');
var AWS = require('aws-sdk');
var config = require('../../server/config');
var Busboy = require('busboy');
var busboyBodyParser = require('busboy-body-parser');
AWS.config.update({
accessKeyId: config.aws.accessKeyId,
secretAccessKey: config.aws.secretAccessKey,
region: config.aws.region
});
var s3 = new AWS.S3();
module.exports = function(app) {
app.use(busboyBodyParser());
app.post('/upload', function(req,res){
var directory = req.body.directory;
var image = req.files.file.name;
var contenttype = req.files.file.mimetype;
if(req.body.directory) {
var file = directory+'/'+image;
} else {
var file = image;
}
var data = req.files.file.data;
var keys = {
Bucket: req.body.bucket,
Key: file,
Body: data,
ACL: 'public-read',
ContentType: contenttype
};
s3.upload(keys, function(err, result) {
if (err) {
res.send({
isError:true,
status:400,
message:"File Not Uplaod",
data:err
});
} else {
var data = {
Location: result.Location,
key:result.key,
Bucket:result.Bucket
};
res.send({
isError:false,
status:200,
message:"File Uplaod",
data:data
});
}
});
});
}
在这是代码我已经在aws s3本地成功上传图像但是使用AWS Lambda这个代码不起作用
答案 0 :(得分:2)
您需要为lambda设置IAM角色以访问AWS
还需要为S3存储桶创建策略
然后将S3策略附加到Lamba IAM角色。
完成上述操作后,您的Lambda将可以访问S3。
答案 1 :(得分:1)
要使用AWS Lambda,首先需要为该lambda函数提供角色,该角色具有对该存储桶的AWS S3的上传权限。 您不需要使用AWS Lambda的访问密钥和秘密密钥。
据我了解,您想使用AWS Lambda将图像从本地目录上传到AWS S3存储桶。
但是,如果您将相同的代码放入AWS Lambda中,它将无法正常工作。 AWS Lambda是来自AWS的一项服务,已部署在其云中。因此它将像其他服务一样远程工作。
首先,您需要部署文件服务器,从中可以通过IP访问图像。它可以在本地服务器上。 然后将该IP作为代码中的路径,并在代码中实施必要的更改