如何使用C#从谷歌硬盘下载公共共享文件

时间:2017-02-25 03:55:26

标签: c# google-drive-api

我正在尝试使用C#从Google云端硬盘下载公共共享文件。

这是我目前正在使用的代码

DriveService.Files.Get(fileId);

从网址

中取fileID的位置
https://drive.google.com/file/d/{ fileID }/view?usp=sharing

现在这一切看起来应该没问题,但我每次都会收到一个找不到错误的文件。

之前我已经完成了这项工作,从共享的公共文件夹中获取文件列表,并设法通过使用此查询来使其工作

ListRequest request = service.Files.List();
request.Q = $"'{ folderID }' in parents";
request.Fields = "files(mimeType,id,modifiedTime,name,version,originalFilename)";

in parents部分是使这一部分有效的部分,但是我想不出类似的方法来使Get查询起作用,看起来如果给出正确的ID它应该可行我有权限。

我肯定是正确登录的,因为我可以下载其他文件,所以我知道这也不是问题。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

request.Execute();返回的文件资源包含WebContentLink属性。它是使用基于cookie的身份验证下载内容的链接。如果内容是公开共享的,则可以在没有任何凭据的情况下下载内容。

或者你可以这样做(在API v2中):

var request = MyService.Files.Get(FileID);
var stream = new System.IO.MemoryStream();

try
{
    request.Download(stream);
    System.IO.FileStream file = new System.IO.FileStream(PathToSave, System.IO.FileMode.Create, System.IO.FileAccess.Write);
    Stream.WriteTo(file);
    file.Close();
}
catch (Exception ex)
{
     MessageBox.Show(ex.Message, "Error Occured:", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

如果您尝试下载的文件是原生Google文档格式,则您无法获得下载链接。如果是这种情况,您必须查找ExportLinks

您将拥有多个导出链接,因此您必须选择最适合您的格式。

答案 1 :(得分:0)

在通过GoogleWebAuthorizationBroker.AuthorizeAsync()进行身份验证时,问题最终与权限范围相关。

我之前玩过这些游戏,我认为它不起作用,但事实证明你必须删除任何以前的凭据才能使这些更改真正起作用。请参阅评论in google's sample

要阅读公共文件,我必须将以下权限添加到我的范围

DriveService.Scope.DriveReadonly

希望没有其他人能在他们的屏幕上盯着他们几个小时。