环回组件存储aws s3 ACL权限

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)

提前致谢 :)

Ric*_*ogg 5

对不起,这有点晚了但答案就在这里:

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置于"公开阅读",就可以了.