【问题标题】:How to fix "request error" from google cloud storage?如何修复谷歌云存储中的“请求错误”?
【发布时间】:2019-09-05 09:57:59
【问题描述】:

我使用 google.cloud.storage 存储 .mp3 文件。我之前尝试过它并且有效。 现在我编写了另一个使用现有存储功能的新功能。 一切都应该工作,但我得到这个奇怪的错误: “Google.Apis.Requests.RequestError text-to-speach@XXXXXXXXXXX.iam.gserviceaccount.com 没有 storage.objects.create 对 objectsound/voiceAnimals20.mp3 的访问权限。 [403]" 我不知道从什么开始。有人可以帮帮我吗?

Ok 存储功能来了:

public static string VoiceStorage(int catId, string URL, 
Dictionary<string, int> voicesCounter)
{
    Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", 
    @"C:\wordproject-XXXXXXXXXX.json");
    // upload the image storage
    //----------------
    string voiceName;
    voiceName = "voice" + BLLcategory.GetCategoryById(catId).CategoryName 
    + voicesCounter[BLLcategory.GetCategoryById(catId).CategoryName]++ + 
    ".mp3";
    string bucketName = "XXXXXXXX";
    var storage = StorageClient.Create();
    using (var f = File.OpenRead(URL))
    {
        try
        {
            var res = storage.UploadObject(bucketName, voiceName, null, 
            f);
            URL = "https://storage.cloud.google.com/" + bucketName + "/" + 
            voiceName;
        }
        catch (Exception e)
        {
            throw e;
        }
    }
    return URL;
}

新的不起作用的功能是:

private void button12_Click(object sender, EventArgs e)
{
    foreach (COMimageObject obj in BLLobject.GetObjects())
    {
        if(obj.VoiceURL==null)
        {
            try
            {
                string url=BLLtextToSpeach.TextToSpeach(obj.Name);
                url=BLLtextToSpeach.VoiceStorage(
                BLLimage.GetImageById(obj.ImageID).CategoryID,
                url, voicesCounter);
                BLLobject.UpdateVoiceURL(obj.ObjectId, url);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}

在 url=BLLtextToSpeach.VoiceStorage 行之后发生的问题 天呐!!

【问题讨论】:

    标签: c# api google-cloud-storage google-text-to-speech


    【解决方案1】:

    错误的意思是 text-to-speach api 的服务帐户没有对 objectsound 存储桶的创建访问权限。转到存储桶权限并添加具有存储创建者权限的文本转语音服务帐户。

    【讨论】:

    • 坦克你!但我尝试将它添加到任务中——我按下了 enale——然后呢?
    • 要添加它,您只需要进入存储桶,选择编辑存储桶权限,添加成员,在新成员中插入服务帐户邮件,将是一组数字/字母后跟@projectName。 iam.gserviceaccount.com,(您可以在 IAM/服务帐户下找到它),在角色中选择 Storage Object Creator 并保存。对于简单/快速的测试,您可以在this documentation 之后将您的存储桶设置为公开。这应该可以进行测试
    • 能否添加objectsound桶权限的截图?另请确认您收到的错误是相同的。
    • 我现在还确定您是否从 GCP 虚拟机运行它,如果是这种情况,您需要设置 devstorage.full_control 或 devstorage.read_write
    • 如何在此处添加图片?
    【解决方案2】:

    当您收到此错误时:

    [403] 错误 [ 消息[.................iam.gserviceaccount.com 确实如此 没有 storage.buckets.list 访问 Google Cloud 项目的权限。

    您需要拥有来自 IAM 的服务帐户的权限才能读取存储桶

    storage.buckets.get 读取存储桶元数据,不包括 IAM 策略。

    storage.buckets.list 列出项目中的存储桶。也读桶 元数据,

    https://cloud.google.com/storage/docs/access-control/iam-permissions

    “Firebase 管理员”将启用所有必要的权限。

    【讨论】:

      猜你喜欢
      • 2019-04-09
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多