public static async Task <byte[]> DownloadFileToByteArray(string url) { // Create Drive API service. _service = GoogleDriveService; // Attempt download // Iterate through file-list and find the relevant file FilesResource.ListRequest listRequest = _service.Files.List(); listRequest.Fields = "nextPageToken, files(id, name, mimeType, originalFilename, size)"; Google.Apis.Drive.v3.Data.File lobjGoogleFile = null; foreach (var item in listRequest.Execute().Files) { if (url.IndexOf(string.Format("id={0}", item.Id)) > -1) { Console.WriteLine(string.Format("{0}: {1}", item.OriginalFilename, item.MimeType)); lobjGoogleFile = item; break; } } FilesResource.ExportRequest request = _service.Files.Export(lobjGoogleFile.Id, GOOGLE_MYMETYPE_PDF); Console.WriteLine(request.MimeType); using MemoryStream lobjMS = new MemoryStream(); await request.DownloadAsync(lobjMS); // At this point the MemoryStream has a length of zero? lobjMS.Position = 0; return(lobjMS.ToArray()); }
public static async Task DownloadFileById(string id, string lstrDownloadFile) { // Create Drive API service. _service = GoogleDriveService; var file = _service.Files.Get(id).Execute(); FilesResource.ExportRequest request = _service.Files.Export(file.Id, GOOGLE_MYMETYPE_PDF); Console.WriteLine(request.MimeType); MemoryStream lobjMS = new MemoryStream(); await request.DownloadAsync(lobjMS); // At this point the MemoryStream has a length of zero? lobjMS.Position = 0; var lobjFS = new System.IO.FileStream(lstrDownloadFile, System.IO.FileMode.Create, System.IO.FileAccess.Write); await lobjMS.CopyToAsync(lobjFS); }
static async Task GetDriveFile(DriveFile driveFileObject, DriveService driveService, string token, dynamic config, string courseName = "Unknown") { var fileRequest = driveService.Files.Get(driveFileObject.Id); fileRequest.OauthToken = token; var stream = new MemoryStream(); fileRequest.MediaDownloader.ProgressChanged += (Google.Apis.Download.IDownloadProgress progress) => { switch (progress.Status) { case Google.Apis.Download.DownloadStatus.Completed: { Console.WriteLine(String.Format("Downloaded {0}.", driveFileObject.Title)); SaveStream(stream, String.Format(@".\output\{0}\{1}", courseName, driveFileObject.Title)); break; } case Google.Apis.Download.DownloadStatus.Failed: { try { var driveFile = fileRequest.Execute(); if (config.exportmimes.ContainsKey(driveFile.MimeType)) { FilesResource.ExportRequest exportRequest = driveService.Files.Export(driveFile.Id, (string)config.exportmimes[driveFile.MimeType]); exportRequest.OauthToken = token; exportRequest.MediaDownloader.ProgressChanged += (Google.Apis.Download.IDownloadProgress exportProgress) => { switch (exportProgress.Status) { case Google.Apis.Download.DownloadStatus.Completed: { Console.WriteLine(String.Format("Downloaded {0}.{1}.", driveFileObject.Title, (string)config.mimeextensions[exportRequest.MimeType])); SaveStream(stream, String.Format(@".\output\{0}\{1}.{2}", courseName, driveFileObject.Title, (string)config.mimeextensions[exportRequest.MimeType])); break; } case Google.Apis.Download.DownloadStatus.Failed: { Console.WriteLine(String.Format("Download failed on file {0}.\n{2}\n{1}", driveFileObject.Title, exportProgress.Exception.Message, progress.Exception.Message)); break; } } }; exportRequest.DownloadAsync(stream); } else { Console.WriteLine(String.Format("Download failed on file {0}.\n{1}", driveFileObject.Title, progress.Exception.Message)); } } catch (Exception e) { Console.WriteLine(String.Format("Download failed on file {0}.\n{1}", driveFileObject.Title, e.Message)); } break; } } }; // Synchronous for now await fileRequest.DownloadAsync(stream); }