Возникли проблемы при загрузке документов Google с помощью .NET? - PullRequest
0 голосов
/ 03 октября 2019

Я создал образец веб-приложения для доступа к API Google Drive.

  1. Включен API документов на диске Google с использованием моей учетной записи Google.
  2. Скачал файл credential.json и включен в проект.
  3. Загрузил один документ на мой диск Google с этиминиже код
UserCredential credential;
string[] scopes = new string[] { DriveService.Scope.Drive,
                    DriveService.Scope.DriveAppdata,
                    DriveService.Scope.DriveFile,
                    DriveService.Scope.DriveMetadataReadonly,
                    DriveService.Scope.DriveReadonly,
                    DriveService.Scope.DriveScripts
};

using (var stream = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "credentials.json", FileMode.Open, FileAccess.ReadWrite))
{
  string credPath = AppDomain.CurrentDomain.BaseDirectory + "token.json";
  credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
scopes,
"user",
CancellationToken.None, 
new FileDataStore(credPath, true)).Result;
 }

DriveService driveService = new DriveService(new BaseClientService.Initializer()
{
 HttpClientInitializer = credential,
ApplicationName = ApplicationName,
 });

FilesResource.CreateMediaUpload request;
using (var stream = new System.IO.FileStream(fileName,                                            System.IO.FileMode.Open))
{
   request = driveService.Files.Create(fileMetadata, stream, mimeType);
   request.Fields = "id";
   request.Upload();
}

file = request.ResponseBody;

Загрузка файлового потока
 var request = service.Files.Get(fileId);
                    var stream = new System.IO.MemoryStream();

                    request.MediaDownloader.ProgressChanged +=
                        (IDownloadProgress progress) =>
                        {
                            switch (progress.Status)
                            {
                                case DownloadStatus.Downloading:
                                    {                                       
                                        break;
                                    }
                                case DownloadStatus.Completed:
                                    {
                                        var bytearray = stream.ToArray(); 
                                     System.IO.File.WriteAllBytes(SavedLocation, bytearray );
                                        break;
                                    }
                                case DownloadStatus.Failed:
                                    {                                       
                                        break;
                                    }
                            }
                        };
                    request.Download(stream);

Но поток файлов не загружается должным образом в случайных случаях.

Ссылка на ссылку: https://developers.google.com/drive/api/v3/manage-downloads#downloading_google_documents

Как можно достичьэто?

...