2017-03-17 4 views
0

Ich habe Probleme mit dem Download-Prozess, es wird heruntergeladen, aber die heruntergeladene Datei ist die gleiche Byte-Größe: 108102 Bytes; unabhängig davon, ob die eigentliche Datei kleiner oder größer ist.Beschädigter Datei-Download von Google Drive

Ich kann eine PDF-Datei erfolgreich hochladen und ihre Berechtigungen so einstellen, dass sie für alle sichtbar ist, die den Link https://drive.google.com/open?id=UNIQUE_ID_HERE haben. Im Folgenden finden Sie die Funktion verwenden, um I asynchron die Datei herunterladen:

/// <summary>Downloads the media from the given URL.</summary> 
    private async Task DownloadFile(DriveService service, string url) 
    { 
     var downloader = new MediaDownloader(service); 
     downloader.ChunkSize = DownloadChunkSize; 
     // add a delegate for the progress changed event for writing to console on changes 
     downloader.ProgressChanged += Download_ProgressChanged; 

     var fileName = DownloadDirectoryName + @"\cover_new.pdf"; 

     Console.WriteLine("Downloading file from link: {0}", url); 

     using (var fileStream = new System.IO.FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write)) 
     { 
      var progress = await downloader.DownloadAsync(url, fileStream); 

      if (progress.Status == DownloadStatus.Completed) 
      { 
       Console.WriteLine(fileName + " was downloaded successfully: " + progress.BytesDownloaded); 
      } 
      else 
      { 
       Console.WriteLine("Download {0} was interrupted in the middle. Only {1} were downloaded. ", fileName, progress.BytesDownloaded); 
      } 
     } 
    } 

Auch ich bin in der Lage, diese Datei öffnen Sie den Link erfolgreich von einem anderen Browser ohne eingegebenen Anmeldeinformationen.

+1

Haben Sie versucht, den Inhalt der Datei anzuzeigen, die in einem Texteditor heruntergeladen wurde. Ich vermute, dass es sich um eine HTML-Seite handelt, auf der entweder eine Fehlermeldung oder eine Art Login-Bildschirm angezeigt wird. – Phylyp

+0

@Phylyp, ich öffnete den Inhalt in Notepad ++ und es ist alles HTML/Javascript, aber ich sehe keinen Zugriff verweigert Fehler oder ähnliches. Ich denke, es könnte ein Login sein, aber ich kann es nicht sicher sagen. Ich habe die Datei mit der Erweiterung '.html' umbenannt, aber ich kann sie nicht in einem Browser öffnen, sie lädt eine leere Seite und die Quelle ist vollständig vorhanden, wenn ich sie anschaue. –

+0

@Phyply,. Ich denke, die erste Frage sollte sein, ob ich die richtige URL zum Herunterladen verwende. Die DownloadAsync-Methode benötigt URL als ersten Parameter. –

Antwort

0

Ich habe falsch versucht, die Datei mit einer URL wie: https://drive.google.com/open?id=UNIQUE_ID_HERE herunterladen.

Änderungen Ich habe auf meine Methode:

  • Der zweite Parameter, url, ist nun ein file Objekt. Ich habe die URL übergeben, aber stattdessen sollte ich die Datei mit service.Files.Get() abrufen und ihre ID verwenden.
  • Benennen Sie den zweiten Parameter aus Gründen der Übersichtlichkeit in fileToDownload um.
  • Da ich jetzt ein Dateiobjekt downloadfile für die Datei habe, die ich herunterladen möchte, kann ich seine DownloadAsync Methode aufrufen, die es den Filestream sendet, den ich bereits hatte.

Der neue Code unten:

private async Task DownloadFile(DriveService service, Google.Apis.Drive.v3.Data.File fileToDownload) 
    { 

     var downloader = new MediaDownloader(service); 
     downloader.ChunkSize = DownloadChunkSize; 
     // add a delegate for the progress changed event for writing to console on changes 
     downloader.ProgressChanged += Download_ProgressChanged; 

     var fileName = DownloadDirectoryName + @"\cover_new.pdf"; 

     var downloadfile = service.Files.Get(fileToDownload.Id); 

     Console.WriteLine("Downloading file with id: {0}", fileToDownload); 

     using (var fileStream = new System.IO.FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write)) 
     { 
      var progress = await downloadfile.DownloadAsync(fileStream); 

      if (progress.Status == DownloadStatus.Completed) 
      { 
       Console.WriteLine(fileName + " was downloaded successfully: " + progress.BytesDownloaded); 
      } 
      else 
      { 
       Console.WriteLine("Download {0} was interrupted in the middle. Only {1} were downloaded. ", fileName, progress.BytesDownloaded); 
      } 
     } 
    } 

Ich hoffe, das hilft jemand da draußen.

+1

Happy Sie haben es gelöst, und vielen Dank für die gemeinsame Nutzung der Lösung. – Phylyp