在Windows应用商店应用中将文件上传到Google云端硬盘

时间:2013-11-26 10:24:51

标签: c# windows-8 windows-runtime microsoft-metro google-drive-api

更新1

我认为我使用的网址不正确,this doc说要使用“https://www.googleapis.com/drive/v2/files”& this doc说使用“https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart”。虽然我得到了相同的400个错误请求。

我可以在后台上传器课程中使用Google云端硬盘上传REST API吗?


我正在关注来自Google云端硬盘的this doc上传文件,但我收到了400条错误请求。我的代码出了什么问题?

public static async Task UploadFileAsync(Token AuthToken, StorageFile file, DriveFile objFolder)
{
    try
    {
        if (!httpClient.DefaultRequestHeaders.Contains("Authorization"))
        {
            httpClient.DefaultRequestHeaders.Add("Authorization", AuthToken.TokenType + " " + AuthToken.AccessToken);
        }

        var JsonMessage = JsonConvert.SerializeObject(objFolder);
        /*JsonMessage = {"title":"c4611_sample_explain.pdf","mimeType":"application/pdf","parents":[{"id":"root","kind":"drive#fileLink"}]}*/
        var JsonReqMsg = new StringContent(JsonMessage, Encoding.UTF8, "application/json");

        var fileBytes = await file.ToBytesAsync();

        var form = new MultipartFormDataContent();
        form.Add(new ByteArrayContent(fileBytes));
        form.Add(JsonReqMsg);

        form.Headers.ContentType = new MediaTypeHeaderValue("multipart/related");

        var UploadReq = await httpClient.PostAsync(new Uri("https://www.googleapis.com/drive/v2/files?uploadType=multipart"), form);

        if (UploadReq.IsSuccessStatusCode)
        {
            var UploadRes = await UploadReq.Content.ReadAsStringAsync();
        }
        else
        {

        }
    }
    catch (Exception ex)
    {

    }
}

1 个答案:

答案 0 :(得分:0)

您必须使用https://www.googleapis.com/upload/drive/v2/files

我这里有一个工作示例(抱歉,JSON字符串是硬编码的):

// Multipart file upload
HttpClient client = new HttpClient();
string uriString = "https://www.googleapis.com/upload/drive/v2/files?key=<your-key>&access_token=<access-token>&uploadType=multipart";
Uri uri = new Uri(uriString);

HttpContent metadataPart = new StringContent(
    "{ \"title\" : \"My File\"}",
    Encoding.UTF8, 
    "application/json");

HttpContent mediaPart = new StringContent(
    "The naughty bunny ate all the cookies.",
    Encoding.UTF8,
    "text/plain");

MultipartContent multipartContent = new MultipartContent();
multipartContent.Add(metadataPart);
multipartContent.Add(mediaPart);

HttpResponseMessage response = await client.PostAsync(uri, multipartContent);
string responseString = await response.Content.ReadAsStringAsync();