Google 无法访问云存储报告下载
Google Cloud Storage report download no access
我正在 运行ning 节点从 google 云存储下载销售报告。
我得到了 credentials.json 文件。现在的问题是,每次我 运行 我的应用程序都会收到“xxxxxxx@gmail.com”没有 storage.objects.get 访问 Google 云存储对象的权限。
是的,此电子邮件未在 google 云存储中注册或授予权限,但它应该单独使用凭据,不是吗?
凭据直接来自 google 云存储并具有以下信息:
client_secret,project_id,redirect_uri,client_id...
我的示例代码:
// Imports the Google Cloud client library.
const {Storage} = require('@google-cloud/storage');
const projectId = 'xxxxxxxxxxxxxxxxxx'
const key = 'credentials.json'
const bucketName = 'pubsite.......'
const destFileName = './test'
const fileName = 'salesreport_2020.zip'
// Creates a client
const storage = new Storage({projectId, key});
async function downloadFile() {
const options = {
destination: destFileName,
};
// Downloads the file
await storage.bucket(bucketName).file(fileName).download(options);
console.log(
`gs://${bucketName}/${fileName} downloaded to ${destFileName}.`
);
}
downloadFile().catch(console.error);
因为您看到的是随机 gmail 地址,这可能意味着存储客户端正在使用 Application default credentials 而不是您想要的地址。有两条前进的道路:
接受应用程序默认凭据。删除您传递给 Storage
构造函数的选项,并将 GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为您的 json 服务帐户文件。
修复 Storage
构造函数以正确传递凭据。问题可能很简单,就像您需要将完整路径传递给凭据文件(即 /a/b/c/credentials.json
)一样。可能存储选项没有被正确处理,尝试像
一样明确
const storage = new Storage({projectId: 'your-project-id', keyFilename: '/path/to/keyfile.json'});
您使用的凭据文件类型错误。
您的代码是为使用服务帐户 JSON 密钥文件而编写的。您提到凭据文件包含 client_secret。这意味着您正在尝试使用 OAuth 2.0 客户端 ID。
查看文件 credentials.json。它应该包含“类型”:“service_account”。如果您在文件开头看到 {"installed": 或 {"web":,则您的凭据有误。
Creating and managing service account keys
此外,您在以下行中指定的参数有误:
const storage = new Storage({projectId, key});
替换为:
const storage = new Storage({projectId: projectId, keyFilename: key});
我正在 运行ning 节点从 google 云存储下载销售报告。 我得到了 credentials.json 文件。现在的问题是,每次我 运行 我的应用程序都会收到“xxxxxxx@gmail.com”没有 storage.objects.get 访问 Google 云存储对象的权限。
是的,此电子邮件未在 google 云存储中注册或授予权限,但它应该单独使用凭据,不是吗? 凭据直接来自 google 云存储并具有以下信息: client_secret,project_id,redirect_uri,client_id...
我的示例代码:
// Imports the Google Cloud client library.
const {Storage} = require('@google-cloud/storage');
const projectId = 'xxxxxxxxxxxxxxxxxx'
const key = 'credentials.json'
const bucketName = 'pubsite.......'
const destFileName = './test'
const fileName = 'salesreport_2020.zip'
// Creates a client
const storage = new Storage({projectId, key});
async function downloadFile() {
const options = {
destination: destFileName,
};
// Downloads the file
await storage.bucket(bucketName).file(fileName).download(options);
console.log(
`gs://${bucketName}/${fileName} downloaded to ${destFileName}.`
);
}
downloadFile().catch(console.error);
因为您看到的是随机 gmail 地址,这可能意味着存储客户端正在使用 Application default credentials 而不是您想要的地址。有两条前进的道路:
接受应用程序默认凭据。删除您传递给
Storage
构造函数的选项,并将GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为您的 json 服务帐户文件。修复
一样明确Storage
构造函数以正确传递凭据。问题可能很简单,就像您需要将完整路径传递给凭据文件(即/a/b/c/credentials.json
)一样。可能存储选项没有被正确处理,尝试像const storage = new Storage({projectId: 'your-project-id', keyFilename: '/path/to/keyfile.json'});
您使用的凭据文件类型错误。
您的代码是为使用服务帐户 JSON 密钥文件而编写的。您提到凭据文件包含 client_secret。这意味着您正在尝试使用 OAuth 2.0 客户端 ID。
查看文件 credentials.json。它应该包含“类型”:“service_account”。如果您在文件开头看到 {"installed": 或 {"web":,则您的凭据有误。
Creating and managing service account keys
此外,您在以下行中指定的参数有误:
const storage = new Storage({projectId, key});
替换为:
const storage = new Storage({projectId: projectId, keyFilename: key});