0

SharpGsクライアント ライブラリに基づいて、C# コンソール アプリケーションから再開可能なアップロードを実装しようとしています。これまでのところ、ファイル サイズが 2 GB を超えるデータをコンソール アプリから Google クラウド ストレージに PUT できます。

POST リクエストの開始中に、再開可能なアップロードを実装するために、サーバーはこれで応答しています。

「リモート サーバーがエラーを返しました: (403) 許可されていません。」} System.Net.WebException .

私が送信している URI は、POST リクエストで「https://mybucket_name.commondatastorage.googleapis.com/Test1Gb.rar」です。

「Test1Gb.rar」----はファイル名です。

Google Cloud Developers Guide に記載されているように、次のように POST リクエストを送信しています。

private HttpWebRequest PostCreateRequest(string authValue, DateTime date, string contentType,int contentLength)
    {
        var request = (HttpWebRequest)WebRequest.Create(_uri);
        request.Method = PureRequestMethod(_method).ToString();
        request.Headers.Add(@"Authorization", authValue);
        request.Headers.Add(@"x-goog-resumable", "start");
        request.Date = date;
        request.ContentLength = 0;
        request.ContentType = contentType;
        return request;
    }


public string PostRequest(string authValue, DateTime date, string contentType,int contentLength, Bucket.ObjectHead objectHead)
    {
        try
        {
            var request = PostCreateRequest(authValue, date, contentType,contentLength);

            using (var response = (HttpWebResponse)request.GetResponse())
            {  
                if (response.StatusCode == HttpStatusCode.Created)
                {
                    return String.Empty;
                }
                else
                    return StreamToString(response.GetResponseStream());
            }
        }
        catch (WebException exception)
        {
            return StreamToString(exception.Response.GetResponseStream());
        }
    }

私はこれを1週間試しています。これの何が悪いのかわかりません。

誰からでも得ることができる助けはありますか?

ありがとうございました。

4

1 に答える 1

0

403 は通常、権限の問題を示します。宛先バケットにオブジェクトを作成する権限がないか、その名前のオブジェクトが宛先バケットにすでに存在し、それを上書きする権限がない可能性があります。gsutil を使用して、アップロードしようとしているバケットとオブジェクトに関連付けられている ACL を取得して調べます。構文は「gsutil getacl gs://mybucket_name」および「gsutil getacl gs://mybucket_name/Test1Gb.rar」になります。

もう 1 つのよくある落とし穴は、人々が複数のプロジェクトを持っていて、1 つのプロジェクトを使用してバケットを作成し、別のプロジェクトを使用してバケットを操作する (この場合はオブジェクトをアップロードする) ために使用される OAauth トークンを取得することです。

別の戦略は、POST を使用して同じオブジェクトへの再開不可能なアップロードを試すことです。それが機能する場合、問題は再開可能なアップロード プロトコルの使用に関連していることがわかります。それが失敗した場合は、再開可能なアップロードとは関係なく、ACL/権限の問題である可能性が高くなります。

于 2012-05-19T15:38:52.093 に答える