我正在尝试使用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它应该可行我有权限。
我肯定是正确登录的,因为我可以下载其他文件,所以我知道这也不是问题。
非常感谢任何帮助。
答案 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
希望没有其他人能在他们的屏幕上盯着他们几个小时。