Alo*_* Oh 1 permissions storage acl loopback amazon-s3
我正在研究这个项目,我设法通过我在环回模型上创建的终点上传图像,问题是我需要将上传的图像公开访问,似乎无法找到在哪里做那.我已经尝试使用aws sdk用putObjectACL更改对象权限但无法使其工作,它说我已经错误地构建了xml,因为我甚至无法计算如何填充方法所需的属性,所以我找到了改变它的方法,就是复制它并将ACL设置为'public-read'然后删除原始文件,然后再将其复制到原始文件名并再次删除其他副本,看起来像是一个非常顽皮的解决方案,我很确定必须有一个更简洁的方法来做到这一点.我使用我的远程方法进行上传,如下所示:
Container.upload(req,res,{container: "my-s3-bucket"},function(err,uploadInfo) { ... }
Run Code Online (Sandbox Code Playgroud)
容器是我的模型连接到aws s3.然后我像这样进行权限更改(复制和删除):
var AWS = require('aws-sdk');
AWS.config.update({accessKeyId:"my-key-id",secretAccessKey:"my-key", region:"us-east-1"});
var s3 = new AWS.S3();
s3.copyObject( {
Bucket:'my-s3-bucket',
CopySource: 'my-s3-bucket/'+filename,
Key: filename+"1",
ACL: 'public-read'
}, function(err,info) {
if (err) return cb(err);
s3.deleteObject( {
Bucket:'my-s3-bucket',
Key:filename
}, function(err,info) {
if (err) return cb(err);
s3.copyObject( {
Bucket: 'my-s3-bucket',
CopySource: 'my-s3-bucket/'+filename+"1",
Key: filename,
ACL: 'public-read'
}, function(err,info) {
if (err) return cb(err);
s3.deleteObject( {
Bucket: 'my-s3-bucket',
Key: my-s3-bucket+"1"
}, function(err,info) {
if (err) return cb(err);
cb(null,uploadInfo);
})
})
})
});
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更清洁的东西:
Container.upload(req,res,{container: "my-s3-bucket", ACL:'public-read'},function(err,uploadInfo) { ... }
Run Code Online (Sandbox Code Playgroud)
提前致谢 :)
对不起,这有点晚了但答案就在这里:
https://github.com/strongloop/loopback-component-storage/pull/47
他们增加了对应用acls和其他一些东西的支持:
var dsImage = loopback.createDataSource({
connector: require('loopback-component-storage'),
provider: 'filesystem',
root: path.join(__dirname, 'images'),
getFilename: function(fileInfo) {
return 'image-' + fileInfo.name;
},
acl: 'public-read',
allowedContentTypes: ['image/png', 'image/jpeg'],
maxFileSize: 5 * 1024 * 1024
});
Run Code Online (Sandbox Code Playgroud)
将该acl置于"公开阅读",就可以了.