2016-10-05 60 views
0

我創建具有的NodeJS公共水桶仍然沒有獲得(在ES5/ES6混合道歉,複製谷歌的例子是ES5):谷歌存儲桶是公衆和文件

var gcloud = require('google-cloud'); 

const gcs = gcloud.storage({ 
     projectId: 'h-212f6', 
     keyFilename: './h-9a814129651f4.json' 
}); 

const createBucket = (bucketName) => { 
    // Create a new bucket. 

    return new Promise((resolve, reject) => { 

    gcs.createBucket(bucketName, function (err, bucket) { 
     if (err) { 
      reject(err); 
     } 

     bucket.acl.add({ 
      entity: 'allUsers', 
      role: gcloud.storage.acl.READER_ROLE 
     }, function(err, aclObject) { 
      console.log('err -> ', err); 
     }); 

     resolve(bucket); 
    }); 

    }); 
}; 

const upload = (bucket, filepath, options) => { 

    return new Promise((resolve, reject) => { 

     bucket.upload(filepath, options, function (err, file) { 

      if (err) { 
       reject(err); 
      } 

      resolve(file) 
     }); 
    }); 
}; 

然而,有麻煩訪問從Chrome中的文件:

chrome error

UPDATE:

當我更改文件的ACL中的所有似乎工作:

const upload = (bucket, filepath, options) => { 

    return new Promise((resolve, reject) => { 

     bucket.upload(filepath, options, function (err, file) { 

      if (err) { 
       reject(err); 
      } 

      file.acl.add({ 
       entity: 'allUsers', 
       role: gcs.acl.READER_ROLE 
      }, function (err, aclObject) { 

       console.log('err -> ', err); 

      }); 

      resolve(file) 
     }); 
    }); 
}; 

然而,我的假設下,改變桶ACL應該是足夠了,不是嗎?

+0

你能告訴我們更多關於你在哪裏運行這段代碼嗎?什麼操作具體返回401?第5行的相對路徑是否可行? –

+0

當然可以。嘗試從chrome導航到返回的網址時,在本地運行並獲取錯誤 – Guy

回答

3

在上面的代碼中設置ACL時,將爲現有對象設置ACL。爲了將其作爲新對象的默認ACL也是如此,你需要做到以下幾點:

bucket.acl.default.add({ 
    entity: 'allUsers', 
    role: gcloud.storage.acl.READER_ROLE 
}, function(err, aclObject) { 
    console.log('err -> ', err); 
}); 

更多的例子見here

相關問題