如何使用C#从Google云端硬盘下载二进制文件

问题描述 投票:0回答:1

我正在使用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();  

但是它只是返回页面的标记供用户登录。我使用服务帐户创建了导出请求,因此不需要登录。

是否有使用V3 google API在.Net中进行此操作的示例?

google-drive-api
1个回答
0
投票

[好吧,我实际上在发布此内容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");
            }

        }
© www.soinside.com 2019 - 2024. All rights reserved.