1

我将 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 tnx 行之后发生的问题!

4

2 回答 2

0

当您收到此错误时:

[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 管理员”将启用所有必要的权限。

在此处输入图像描述

于 2021-08-16T22:09:26.393 回答
0

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

于 2019-09-05T10:07:20.800 回答