11

Ich versuche, Google Drive API von einer asp.net-Anwendung zum Hochladen von Dateien zu verwenden.Google Drive API mit C# - Hochladen

. Problem: Der Code funktioniert lokal, aber wenn an den Server hochgeladen nichts passiert (die Seite gerade Laden hält ... keine Zustimmung Bildschirm zeigt appreaciated Hilfe „UploadedPdf“ -Ordner ist beschreibbar und client_secrets.json existiert im Ordner..

HINWEIS: ich habe nichts auf dem Server installiert, aber nur hochgeladen werden alle Dateien, die Google API dLL in den Ordner bin des Servers enthalten

UserCredential credential; 
     using (var filestream = new FileStream(Server.MapPath("UploadedPdf/client_secrets.json"), 
      FileMode.Open, FileAccess.Read)) 
     { 
      credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(filestream).Secrets, 
       new[] { DriveService.Scope.Drive }, 
       "user", 
       CancellationToken.None, 
       new FileDataStore(Server.MapPath("UploadedPdf/"))).Result; 
     } 

     // Create the service. 
     var service = new DriveService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = "Drive API Sample", 
     }); 

     Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File(); 
     body.Title = "My document"; 
     body.Description = "A test document"; 
     body.MimeType = "text/plain"; 

     byte[] byteArray = System.IO.File.ReadAllBytes(Server.MapPath("UploadedPdf/sample.txt")); 
     System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray); 

     FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain"); 
     request.Upload(); 

     Google.Apis.Drive.v2.Data.File file = request.ResponseBody; 
+0

Haben Sie die Umleitung uri auf den Server hinzufügen in Google Entwicklerkonsole? – DaImTo

+0

Ja, ich habe die Weiterleitungs-URL hinzugefügt. – pessi

+0

goto browser consoler irgendein fehler bitte aktualisieren? –

Antwort

0

ich glaube, Sie die AuthorizeAsync anrufen() falsch. Benutze das await-Schlüsselwort und entferne das .Result. Du musst die Methode als markieren ync, um dies zu tun.

Ich würde auch vorschlagen, stattdessen die UploadAsync() -Methode zu verwenden. Sie müssen nicht die gesamte Datei mit ReadAllBytes() in den Speicher laden. Verwenden Sie einfach File.OpenRead() und übergeben Sie den FileStream anstelle von MemoryStream.

Google hat einig Beispiel-Code: https://developers.google.com/api-client-library/dotnet/guide/media_upload

2

FileDatastor legen Dateien standardmäßig in% AppData%. Normalerweise würde ich so etwas tun. (Lässt vermuten, verwende ich "user" auch)

new FileDataStore("Console.Analytics.Auth.Store") 

Dann, wenn ich es nenne ich ein Verzeichnis

%AppData%\Roaming\Console.Analytics.Auth.Store 

in diesem Verzeichnis mit dem Namen lebt jetzt eine Datei namens

Google.Apis.Auth.OAuth2.Responses.TokenResponse-user 

Ich habe nicht getestet, was tun

new FileDataStore(Server.MapPath("UploadedPdf/")) 

tun, aber meine Vermutung ist, Sie gehen ein Verzeichnis mit dem Namen

%AppData%\Roaming\serverpat/uploadpdf/ 

Was ich glaube nicht bekommen ist, was Sie sind. Wenn Sie das wirklich versuchen, haben Sie dieses Verzeichnis schreibbar gemacht? Vielleicht möchten Sie stattdessen mit LocalFileDataStore suchen.

Ich bin mir nicht sicher, ob das Ihr Problem ist oder nicht.

Denken Sie auch daran, Sie sind hart Codierung "Benutzer" so technisch Ihr Code wird Sie bitten, einmal für "Benutzer" zu authentifizieren, nachdem es die Authentifizierung in dieser Datei für "Benutzer" hat, so gibt es keinen Grund zu fragen es wieder.

0

Ihr Code schlägt vor, dass Sie den Arbeitsablauf/die Anmeldeinformationen "Installierte Anwendung" verwenden, der ordnungsgemäß funktionieren soll, wenn Sie Ihre ASP.NET-Anwendung lokal ausführen. Wenn Sie denselben Code jedoch auf einen Webserver verschieben, ist dieser keine installierte Anwendung mehr. Es tritt in die Kategorie "Web Application" ein.

Sie müssen unter Google Developer Console-> Anmeldeinformationen-> Neue Client-ID erstellen und einen neuen Satz von Anmeldeinformationen für Ihre Webanwendung generieren.Auch müssen Sie nach diesem Leitfaden die OAuth Fluss ändern:

https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web-applications-aspnet-mvc

+0

Es ist bereits eine Webapplikation – pessi

+0

Dann versuchen Sie die Authentifizierungsmethode, die im obigen Link zur Verfügung gestellt wird, anstatt das, was Sie zuvor versucht haben, und teilen Sie die Ergebnisse bitte. –

+0

Ein weiterer Fehler kann von DalmTo sein. Möglicherweise möchten Sie die Speicherschnittstelle erweitern, um Ihre eigenen zu implementieren. Referenz: https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#credentials –

0

Schritte

1)Access to the internet and a web browser, in order to authorize the sample app. 
2)A Google account with Drive enabled. 
3)An environment to run programs in your selected language. 

versuchen, diese umfassen,

https://developers.google.com/drive/v2/reference/files/insert#examples