2013-11-22 7 views
1

Хорошо, я не понимаю, почему это не работает. Один и тот же код работает только для загрузки метаданных, а затем для загрузки нескольких частей. Я не могу возобновить загрузку на работу.Google Drive Возобновить не загружать Ответ

Uploading Files Говорит, что Шаг 1 должен вернуть 200 ok с upload_id, однако следующая строка ничего не возвращает. Длина контента равна 0, ответа об ошибке нет.

string responseFromServer = reader.ReadToEnd(); 

Мой код:

FileInfo info = new FileInfo(pFilename); 
String MimeType = GetMimeType(pFilename).ToString(); 
string footer = "\r\n"; 
//Createing the MetaData to send 
List<string> _postData = new List<string>(); 
_postData.Add("{"); 
_postData.Add("\"title\": \"" + info.Name + "\""); 
_postData.Add("}"); 
string postData = string.Join(" ", _postData.ToArray()); 
byte[] MetaDataByteArray = Encoding.UTF8.GetBytes(postData); 
// creating the Data For the file 
byte[] FileByteArray = System.IO.File.ReadAllBytes(pFilename); 

string url = "https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable"; 
int headerLenght = MetaDataByteArray.Length +footer.Length; 

WebRequest request = WebRequest.Create(url); 
request.Method = "POST"; 
request.Headers.Add("Authorization", string.Format("Bearer {0}", myAutentication.accessToken)); 
request.ContentLength = headerLenght; 
request.ContentType = "application/json; charset=UTF-8"; 
request.Headers.Add("X-Upload-Content-Type", MimeType); 
request.Headers.Add("X-Upload-Content-Length", FileByteArray.Length.ToString());   

Stream dataStream = request.GetRequestStream(); 
dataStream.Write(MetaDataByteArray, 0, MetaDataByteArray.Length); // write the MetaData 
     dataStream.Write(Encoding.UTF8.GetBytes(footer), 0, Encoding.UTF8.GetByteCount(footer)); // done writeing add return just 
     dataStream.Close(); 

    try 
     { 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 


      Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
      // Display the status. IT returns OK 


      // Get the stream containing content returned by the server. 
      dataStream = response.GetResponseStream(); 

      // Open the stream using a StreamReader for easy access. 
      StreamReader reader = new StreamReader(dataStream); 

      // Read the content. 
      string responseFromServer = reader.ReadToEnd(); 

      // Display the content. ResponseFromServer returns "" nothing. 
      //Console.WriteLine(responseFromServer); 
      // Clean up the streams. 
      reader.Close(); 
      dataStream.Close(); 
      response.Close(); 
} 
catch (Exception ex) 
     { 
      return "Exception uploading file: uploading file." + ex.Message; 
      //return Error.CreateJsonError("HttpWeb.Post", "1", "Error: " + ex.Message); 
     } 
+0

Я новичок в облачном хранилище Google, поэтому можете ли вы рассказать мне, как получить authtoken для вызова возобновляемой загрузки api. Пожалуйста, помогите мне. –

+0

Ничего себе, это очень старый вопрос. Но я бы пошел с клиентской библиотекой вместо http://www.daimto.com/google-drive-authentication-c/https://github.com/LindaLawton/Google-Dotnet-Samples/tree/Genreated-samples1.0/Привод% 20API https://developers.google.com/drive/v3/web/resumable-upload – DaImTo

ответ

1

Я, наконец понял это. Идентификатор загрузки возвращается в заголовке ответа.

WebResponse response = request.GetResponse(); 
string Location = response.Headers["Location"]; 
Смежные вопросы