如何在Google云端存储中获取项目ID

时间:2014-07-10 16:51:01

标签: java google-cloud-storage

我已在我的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"文件。 然后我使用提供的那个例子"授权"获取CredentialsStorage个对象的方法。

在此之后,我想以编程方式列出当前项目中可用的所有存储桶。 (当前项目=从特定项目下载client_secrets.json。)。但是API要求我输入项目名称,而这个名称似乎没有以编程方式获得。

4 个答案:

答案 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"