2012-10-23 17 views
5

Obecnie próbuję utworzyć aplikację, która pobiera pliki z Dysku Google.Jak pobrać plik z Dysku Google

W dokumentacji dysków Google Drive SDK znalazłem przykładową metodę, która powinna zwrócić obiekt System.IO.Stream.

https://developers.google.com/drive/manage-downloads

Aby to zrobić musi URL pobierania dla każdego pliku. Jednak ten URL do pobrania nie zawsze jest zwracany. Czy ktoś ma jakiś pomysł, dlaczego tak jest? I co mogę z tym zrobić?

Aktualizacja: Znalazłem, że mogę użyć exportURL. Są one prawie zawsze zwracane przez serwis.

Pytanie od "Folowup": Jak mogę uruchomić aplikację jako określony użytkownik? => czasami aplikacja wysyła żądanie do adresu URL, a następnie wygasa żądanie. Kiedy próbuję tego samego adresu URL w przeglądarce, działa jak urok ...

Dzięki!

Odpowiedz

1

Nie będziesz mieć linku pobierania, jeśli plik, który próbujesz pobrać, jest natywnym formatem google docs. Jeśli tak jest, musisz wyszukać ExportLinks.

Będziesz mieć kilka linków eksportowych, więc trzeba będzie wybrać, który format najbardziej Ci odpowiada: docx lub ODT dla dokumentu np

+0

Właśnie pisałem to samo na moje pytanie :) Teraz mam jednak inny problem. Czasami żądanie wygasa i nie wiem dlaczego, ponieważ linki eksportowe działają, dlatego próbuję je w przeglądarce. – Nielsm

+0

Nigdy nie doświadczyłem żadnego timeoutu. Jednak zdarzają się przypadkowe błędy serwera. Powinieneś zaimplementować Exponential backoff, jest taki przykład w dokumentacji Drive API – Jerome

+0

Zaznaczam tę odpowiedź jako poprawną odpowiedź, ponieważ pomogło mi to przejść dalej. Dzięki! – Nielsm

3

Może być późno, ale ja po prostu pobrać z Dysku Google za pomocą następującego kodu:

var stream = service.HttpClient.GetStreamAsync(downloadUrl); 
     var result = stream.Result; 
     using (var fileStream = System.IO.File.Create(filePath)) 
     { 
      result.CopyTo(fileStream); 
     } 
+0

czy możesz mi powiedzieć, jaka biblioteka powinna zostać dodana, aby uzyskać "service.HttpClient.GetStreamAsync (downloadUrl);"? –

+0

@Santarkantos, w przykładzie "usługa" Sando jest instancją DriveService, która pochodzi z interfejsu API Dysku Google. Możesz przeciągnąć biblioteki do swojego projektu za pomocą NuGet i wyszukać Google.Apis.Drive.v2. – Scott