2017-05-11 2 views
1

J'essaie de télécharger un fichier volumineux sur le lecteur Google en effectuant un téléchargement résumable.Problème de téléchargement sur Google Disque

Voici le flux de code

Step 1 : Creating file on Google Drive using Drive service and initiating the resumable upload session using put request

String fileID = _DriveService.Files.Insert(googleFileBody).Execute().Id; 

    //Initiating resumable upload session 

    String UploadUrl = null; 

    String _putUrl = "https://www.googleapis.com/upload/drive/v2/files/" + fileID + "?uploadType=resumable"; 

    HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(_putUrl);  
    httpRequest.Headers["Authorization"] = "Bearer " + AccessToken; 
    httpRequest.Method = "PUT"; 
    requestStream = httpRequest.GetRequestStream(); 
    _webResponse = (HttpWebResponse)httpRequest.GetResponse(); 

    if (_webResponse.StatusCode == HttpStatusCode.OK) 
    { 
     //Getting response OK 
      UploadUrl = _webResponse.Headers["Location"].ToString();   
    } 

Step 2 : Uploading chunks to using UploadUrl . The byte array is in multiple of 256kb and call to this function is in the loop for every chunk

private void AppendFileData(byte[] chunk) 
    { 
     try 
     { 
      HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(UploadUrl); 
      httpRequest.ContentLength = chunk.Length; 
      httpRequest.Headers["Content-Range"] = "bytes " + startOffset + "-" + endOffset+ "/" + sourceFileSize; 
      httpRequest.ContentType= MimeType; 
      httpRequest.Method = "PUT"; 

     MemoryStream stream =new MemoryStream(chunk); 

      using (System.IO.Stream requestStream = httpRequest.GetRequestStream()) 
        { 
         stream.CopyTo(requestStream); 
         requestStream.Flush(); 
         requestStream.Close(); 
        } 

      HttpWebResponse httpResponse = (HttpWebResponse)(httpRequest.GetResponse()); // Throws exception as 
      //System.Net.WebException: The remote server returned an error: (308) Resume Incomplete. 
     //at System.Net.HttpWebRequest.GetResponse() 
     // There is no data getting appended to file 
     // Still executing the append for remaining chunks 

     } 
     catch(System.Net.WebException ex) 
     { 
     } 
    } 

Pour mon dernier morceau qui est pas un multiple de 256 Ko Je reçois erreur

System.Net.WebException: The remote server returned an error: (400) Bad Request. at System.Net.HttpWebRequest.GetResponse()

Ce que je suis faire mal dans ce code? Veuillez suggérer. Merci d'avance

Mayuresh.

Répondre

0

Essayez de vérifier si le dernier segment passe la bonne taille et non la totalité de la matrice comme indiqué dans ce forum. Ali a déclaré dans ce forum que «un problème potentiel est le suivant: si vous envoyez un tableau d'octets qui est à moitié vide pour la dernière requête (c'est-à-dire que le tampon a été lu en moins de la taille du fragment). Voici un exemple d'implémentation de resumable upload. J'espère que cela t'aides.

+1

Je l'ai compris. Le problème était dû à "Content-Range". Le paramètre endoffset de la dernière requête doit être inférieur à un par la taille totale du fichier – Mayuresh