【问题标题】:C# : How to make a POST request in SharpGs client library to initiate resumable uploads in Google Cloud Storage?C#:如何在 SharpGs 客户端库中发出 POST 请求以在 Google Cloud Storage 中启动可恢复上传?
【发布时间】:2012-04-30 09:19:59
【问题描述】:

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

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

“远程服务器返回错误:(403) Forbidden.”} System.Net.WebException .

我发送的 Uri 是带有 POST 请求的“https://mybucket_name.commondatastorage.googleapis.com/Test1Gb.rar”。

“Test1Gb.rar”----是文件名。

正如谷歌云开发者指南中提到的,我发送 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 周。我不知道这有什么问题。

我可以从任何人那里得到任何帮助吗?

谢谢。

【问题讨论】:

    标签: c# post google-cloud-storage


    【解决方案1】:

    403 通常表示权限问题。可能是您无权在目标存储桶中创建对象,也可能是该名称的对象已存在于目标存储桶中,而您无权覆盖它。我会尝试使用 gsutil 来获取和检查与您尝试上传到的存储桶和对象关联的 ACL。语法为“gsutil getacl gs://mybucket_name”和“gsutil getacl gs://mybucket_name/Test1Gb.rar”。

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

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

    【讨论】:

    • 感谢重播。我可以使用 PUT Request 上传文件。所以,我也应该能够使用 POST 请求上传文件。我是否需要为 PUT 和 POST 请求单独的存储桶访问控制列表来处理该存储桶中的对象?
    • 无论如何我都会按照你的建议去做。
    • 马克。我按照您的建议做了(使用 POST 请求上传文件),但也无法做到这一点。它说400 Bad Request。我只是用 POST 替换了 PUT 方法,而没有更改程序中的任何内容。当我使用 PUT 请求从我的控制台应用程序上传文件时,我是否需要添加单独的程序来实现 POST 请求?我也在使用 Google Cloud Storage API 1.0 版,我认为这不是问题。
    猜你喜欢
    • 2016-06-17
    • 2015-07-26
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多