Я создал образец веб-приложения для доступа к API Google Drive.
- Включен API документов на диске Google с использованием моей учетной записи Google.
- Скачал файл credential.json и включен в проект.
- Загрузил один документ на мой диск 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
Как можно достичьэто?