0

我正在尝试从基于SharpGs客户端库的 C# 控制台应用程序实现可恢复上传。到目前为止,我可以将数据从我的控制台应用程序放到文件大小 > 2 GB 的 Google 云存储中。

在发起 POST 请求时,为了实现可恢复的上传,服务器会对此做出响应。

“远程服务器返回错误:(403) Forbidden。”} 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”。

另一个常见的陷阱是人们有多个项目,他们使用一个项目来创建存储桶,并使用另一个项目来获取用于操作(在这种情况下将对象上传到)存储桶的 OAauth 令牌。

另一种策略是尝试使用 POST 对同一对象进行不可恢复的上传。如果可行,那么您就知道问题与您使用可恢复上传协议有关。如果失败,则更可能是 ACL/权限问题,与可恢复上传无关。

于 2012-05-19T15:38:52.093 回答