验证文件后存在Google云404

时间:2017-11-14 02:46:25

标签: javascript node.js firebase google-cloud-platform google-cloud-storage

我有另一个项目,这个相同的代码成功运行,所以它可能是我这次错过的一些配置选项。我正在使用Google Cloud API访问firebase存储空间。

为清楚起见,文件确实存在。

var storage = require('@google-cloud/storage')({
		keyFilename: 'serviceAccountKey.json',
		projectId: 'my-id'
	});
var bucket = storage.bucket('my-id.appspot.com');

var file = bucket.file('directory/file.json'); //this exists!
file.exists(function(err, exists){
   console.log("Checking for challenges file. Results:" + exists + ", err:" + err); //returns "Checking for challenges file. Results:true, err:nil"
       if (exists) {
    	console.log("File exists. Printing."); //prints "File exists. Printing."
    	file.download().then(function(currentFileData) {
    		console.log("This line is never reached.");
    	}).catch(err => {
    		console.error('ERROR:', err); //gives a 404 error
    	});
       }
});

它打印出以下捕获的错误,而不是打印“永远不会到达此行”。 ERROR: { ApiError: Not Found at Object.parseHttpRespMessage (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/src/util.js:156:33) at Object.handleResp ... ...完整错误很大,所以除非有要求,否则我不会将其全部发布在此处。

1 个答案:

答案 0 :(得分:0)

尝试访问该文件的用户可能只能通过存储桶访问,但不能访问该文件。检查两个项目中存储桶和文件的ACL,并比较得到的结果:

myBucket.acl.get()
    .then(acls => console.log("Bucket ACLs:", acls));
myFile.acl.get()
    .then(acls => console.log("File ACLs:", acls));

你应该看到这样的输出:

[ [ { entity: 'user-abenavides333@gmail.com', role: 'OWNER' },
    { entity: 'user-dwilches@gmail.com', role: 'OWNER' } ],
  { kind: 'storage#objectAccessControls',
    items: [ [Object], [Object] ] } ]

如果没有区别,请尝试以下相同代码的详细版本:

myBucket.acl.get()
    .then(acls => console.log("Bucket ACLs:", JSON.stringify(acls, null, '\t')));
myFile.acl.get()
    .then(acls => console.log("File ACLs:", JSON.stringify(acls, null, '\t')));