【发布时间】:2017-09-29 02:31:19
【问题描述】:
确切的文本:“访问被拒绝。调用者没有 storage.objects.get 访问(url)上的对象”
我目前有 2 个关于谷歌服务的项目。一个是用于将图像上传到谷歌云存储(更是如此 firebase 存储)的 Android/iOS 应用程序的资源。另一个是 node.js 服务器,它检测图像何时上传,并向该图像发送带有 signedUrl 的电子邮件。
node.js 服务器具有以下 google 存储设置和调用的函数:
var storage = require("@google-cloud/storage")({
keyFilename: "google_secret.json",
projectId: 'xxxxxxxxxxx'
});
function getImageFromGcloud(x, y, time, date_string) {
var bucket = storage.bucket('bucket-name');
var storage_ref = 'Incomplete_Scans/' + date_string + "/" x + "_" + y + "_" + time + ".jpeg";
bucket.file(storage_ref).getSignedUrl({
action: 'read',
expires: '03-17-2025'
}, function(err, url) {
if (err){
console.error(err);
return;
}
console.log("Sent email");
});
}
getSignedUrl 提供的链接过去可以使用,单击它会打开一个带有图像的新选项卡。然而直到最近,它才刚刚停止。也许它与权限有关,但是我所做的一切都不起作用。有任何想法吗?
先谢谢你了。
【问题讨论】:
-
您使用其密钥生成签名 URL 的服务帐户是否可能已失去对该对象的读取权限?
-
有可能。我可能没有正确执行整个存储桶权限。我已为项目的查看者、编辑者和所有者添加了存储桶权限和对象默认权限,以拥有所有者权限。有什么我想念的吗? @BrandonYarbrough
-
存储桶权限不是分层的。他们不授予对存储桶内对象的读取权限。 “默认对象权限”将,但仅适用于新对象,并且仅在默认情况下。尝试将服务帐户显式添加到某个对象,看看它是否可以解决问题。
-
成功了!太感谢了!
标签: node.js google-app-engine google-cloud-storage firebase-storage