Экспорт / загрузка файла с Google Диска с использованием C# создает пустой файл нулевого байта - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь загрузить файл с Google Диска, используя C# & Google.Apis.Drive.v3, и получаю пустой файл с нулевым байтом (см. Код ниже). Я загружаю файлы нормально, но не могу заставить загрузку работать. Любая помощь будет принята с благодарностью.

code

static string[] Scopes = { DriveService.Scope.Drive };
static string ApplicationName = "Test001";
private DriveService _service = null;
public async Task downloadFile(string url, string lstrDownloadFile)
{

    // Authorize API access
    UserCredential credential;

    using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
    {
        // The file token.json stores the user's access and refresh tokens, and is created
        // automatically when the authorization flow completes for the first time.
        string credPath = "token.json";
        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            Scopes,
            "user",
            CancellationToken.None,
            new FileDataStore(credPath, true)).Result;
        Debug.WriteLine("Credential file saved to: " + credPath);
    }

    // Create Drive API service.
    _service = new DriveService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    // 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)
        {
            Debug.WriteLine(string.Format("{0}: {1}", item.OriginalFilename, item.MimeType));
            lobjGoogleFile = item;
            break;
        }
    }

    FilesResource.ExportRequest request = _service.Files.Export(lobjGoogleFile.Id, lobjGoogleFile.MimeType);
    Debug.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);
}
...