2016-08-27 1 views
0

Ich versuche, eine Google Drive-Datei mit ASP.NET, MVC, Google Drive API V2 in den Standard-Downloadordner des Benutzers herunterzuladen und über das Dienstkonto zu authentifizieren.Laden Sie die Google Drive-Datei von ASP.NET in den Standarddialog des Browsers

Die Beispiele, die ich gesehen habe, verwenden einen _saveTo Pfad und Dateinamen. Ich möchte nicht, dass der Benutzer diese Informationen angeben muss, bevor er den Download startet. Ich möchte nur, dass der Benutzer auf eine Datei in der Web-App klickt und den Browserdownload-Dialog anzeigt. Ist das möglich?

Hier sind die 3 Schichten:

CSHTML

<td> 
    <a href="@Url.Action("DownloadFile", "GoogleDrive", new { _fileId = item.DriveId })">@Html.DisplayFor(x => item.FileName)</a> 
</td> 

CONTROLLER

[HttpGet] 
public ActionResult DownloadFile(string _fileId) 
{ 
    GoogleDrivePageVM vm = new GoogleDrivePageVM(); 

    // Get Service 
    DriveService _service = GoogleDrive.GoogleDriveAPI.GoogleDriveAuthentication(); 

    // Download File 
    File _file = GoogleDrive.GoogleDriveAPI.GetFile(_service, _fileId); 

    bool _success = GoogleDrive.GoogleDriveAPI.DownloadFile(_service, _file, null);  // _saveTo); 

    return RedirectToAction("GoogleDriveList", "GoogleDrive"); 
} 

SERVICE SCHICHT

public static Boolean DownloadFile(DriveService _service, File _file, string _saveTo) 
{ 
    if (!String.IsNullOrEmpty(_file.DownloadUrl)) 
    { 
    try 
    { 
     var x = _service.HttpClient.GetByteArrayAsync(_file.DownloadUrl); 
     byte[] arrBytes = x.Result; 
     System.IO.File.WriteAllBytes("c://myFirstDownload.txt", arrBytes); //_saveTo 
     return true; 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("An error occurred: " + e.Message); 
     return false; 
    } 
    } 
    else 
    { 
    // The file doesn't have any content stored on Drive. 
    return false; 
    } 
} 

Ich fühle mich wie ich das falsch zu implementieren bin versucht, approac h. Kann jemand klären, ob das überhaupt möglich ist und mir in die richtige Richtung weisen? Kann ich einfach die DownloadURL der Datei von der Webseite verwenden?

Antwort

2

Die Download-URL, die Sie suchen, heißt webContentlink in der Drive-API, die mit files.get generiert wird.

webContentLink Ein Link in einem Browser den Inhalt der Datei zum Download bereit. Dies ist nur für Dateien mit binärem Inhalt in Drive verfügbar.

Mit diesem Link können Sie Dateien direkt vom Browser herunterladen.

Verwenden Sie Try-it, um es jetzt zu testen.

+0

Danke, das ist, was ich gesucht habe. Unter welchen Bedingungen möchte ich meinen ursprünglichen Ansatz verwenden? – John

Verwandte Themen