Как загрузить бинарный файл с Google Drive, используя C# - PullRequest
0 голосов
/ 09 февраля 2020

Я использую v3. Net Google Apis. Кажется, это должно быть простой задачей, но, похоже, ничего из того, что я пробовал, не работает.

Я могу получить ресурс файла для нужного файла, выполнив это -

    var fileRequest = service.Files.Get(fileId);
    fileRequest.Fields = "*";
    var fileResponse = fileRequest.Execute();

Но тогда я не смог найти способ загрузить файл. Если я использую это -

    var exportRequest = service.Files.Export(fileResponse.Id, fileResponse.MimeType);
    exportRequest.Download(stream);

Возвращает статус 403 Запрещено с сообщением о том, что Экспорт предназначен только для документов Google.

Я пробовал это -

    var downloadTask = exportRequest.MediaDownloader.DownloadAsync(@"https://docs.google.com/uc?export=download&id=" + fileResponse.Id, file);
    downloadTask.Wait();  

Но это просто возвращает разметку страницы, чтобы пользователь мог войти в систему. Я создал запрос на экспорт, используя служебную учетную запись, поэтому вход в систему не требуется.

У кого-нибудь есть пример сделать это в. Net с использованием API Google V3?

1 Ответ

0 голосов
/ 09 февраля 2020

Хорошо, я буквально заставил это работать через 5 минут после публикации. Вот то, что я нашел работы (я знаю, я пробовал это раньше, и это не сработало, но кто знает) -

        public static async Task DownloadFile(string fileId, DriveService service)
        {
            var fileRequest = service.Files.Get(fileId);
            fileRequest.Fields = "*";
            var fileResponse = fileRequest.Execute();

            var exportRequest = service.Files.Get(fileResponse.Id);

            //you would need to know the file size
            var size = fileResponse.Size;

            var file = new FileStream(fileResponse.Name, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            file.SetLength((long)size);

            var response = await fileRequest.DownloadAsync(file);

            if (response.Status == Google.Apis.Download.DownloadStatus.Failed)
            {
                Console.WriteLine("Download failed");
            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...