我已在我的Gmail帐户上激活了Google云端存储,然后创建了一个新项目。据我所知,并从教程(https://developers.google.com/storage/docs/json_api/v1/json-api-java-samples)中读取,客户机密(client_secrets.json)与项目有关,而与我的帐户无关。
现在,在使用Java API时,有一种方法可以接收存储桶列表,
https://developers.google.com/storage/docs/json_api/v1/buckets/list
虽然它要求我输入项目标识符作为参数。
我检查了API文档,下载客户端机密文件(client_secrets.json)和Java方法,但没有任何东西能为我提供"项目标识符"这与经过身份验证的客户端密钥项目有关。
有没有方法可以找出我主动验证的项目?每次他们在Java程序中进行身份验证时,我都不希望程序用户记住每个项目的标识符。客户机密码文件已经与单个项目相关。
额外信息:
目前我开发了一个GUI Java应用程序。
通过使用“打开文件”对话框,用户可以选择下载的" client_secrets.json"文件。
然后我使用提供的那个例子"授权"获取Credentials
和Storage
个对象的方法。
在此之后,我想以编程方式列出当前项目中可用的所有存储桶。 (当前项目=从特定项目下载client_secrets.json。)。但是API要求我输入项目名称,而这个名称似乎没有以编程方式获得。
答案 0 :(得分:3)
您应该可以在Developer Console中看到它。单击项目,在顶部将告诉您项目ID。
(如果您正在寻找以编程方式获取此功能的方法,请在您的问题中澄清这一点 - 当您想要获取项目ID时,不清楚您手中有哪些信息......或者您是否'期望您的用户创建自己的项目。)
答案 1 :(得分:0)
运行
gsutil ls -L -b gs://<bucket-name>
要获取存储桶信息,您也许可以从输出中找到项目编号。然后您可以运行
gcloud projects list --filter "PROJECT_NUMBER=<project-number>"
找出项目ID。
答案 2 :(得分:0)
更新:json文件的当前版本(用于身份验证)包含ProjectId。
建议的方法是创建一个“服务帐户密钥” json文件,如下所示:https://cloud.google.com/docs/authentication/production#creating_a_service_account(p12仅用于向后兼容)
因此,您可以像这样从json文件中读取它:(C#代码,但是Java代码应该非常接近)(注意:在第一次实例化类之前会调用静态构造函数)
public class YourClass
{
private static readonly string GoogleProjectId;
static YourClass()
{
var GoogleAutFilePath = Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS");
var GContent = JsonConvert.DeserializeObject<JObject>(File.ReadAllText(GoogleAutFilePath));
GoogleProjectId = GContent["project_id"].ToString();
}
}
答案 3 :(得分:0)
如果您有jq
:
project_number=$(gsutil acl get gs://<bucket> | jq ".[0].projectTeam.projectNumber")
gcloud projects list --filter "PROJECT_NUMBER=$project_number"