C# “如何修复”;请求错误“;从谷歌云存储?

C# “如何修复”;请求错误“;从谷歌云存储?,c#,api,google-cloud-storage,google-text-to-speech,C#,Api,Google Cloud Storage,Google Text To Speech,我使用google.cloud.storage来存储.mp3文件。我以前试过了,效果很好。 现在我编写了另一个使用现有存储函数的新函数。 一切都应该正常,但我却犯了一个奇怪的错误: “Google.api.Requests.RequestError 发送至-speach@XXXXXXXXXXX.iam.gserviceaccount.com没有storage.objects.create对objectsound/voiceAnimals20.mp3的访问权限。[403]“ 我不知道从什么开始。有

我使用google.cloud.storage来存储.mp3文件。我以前试过了,效果很好。 现在我编写了另一个使用现有存储函数的新函数。 一切都应该正常,但我却犯了一个奇怪的错误: “Google.api.Requests.RequestError 发送至-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;
}
捕捉发生在url=BLLtextToSpeach.VoiceStorage的行之后
tnx

错误的意思是,text to speach api的服务帐户对objectsound bucket没有创建访问权限。转到bucket权限并将文本添加到具有storage creator权限的speach服务帐户。

谢谢!但我尝试将其添加到premissions中-我按了Enable,然后怎么办?要添加它,您只需转到bucket,选择edit bucket permission,add members,在new member中插入服务帐户邮件,将是一组数字/字母,后跟@projectName.iam.gserviceaccount.com,(您可以在iam/服务帐户下找到它),在角色中选择存储对象创建者并保存。为了便于/快速测试,您可以将您的bucket设置为public follow。这应该可以完成测试的技巧。您可以添加objectsound bucket权限的屏幕截图吗?另外,请确认您收到的错误是相同的。另外,我现在确定您是否从GCP虚拟机运行此操作,如果是这种情况,您将需要设置devstorage.full\u control或devstorage.read\u writehow向此处添加图像?
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;
            }
        }
    }
}