C# 使用RESTAPI v3从Google Drive下载文件夹

C# 使用RESTAPI v3从Google Drive下载文件夹,c#,rest,google-drive-api,C#,Rest,Google Drive Api,我有一个简单的设置:带有服务器端服务的客户端UI 客户端负责文件夹/文件之间的用户交互。服务器负责保存提供的文件id和mimeType 目前,我能够将谷歌文档、演示文稿、电子表格、图纸导出为文件和任何二进制格式的文件 GET https://www.googleapis.com/drive/v3/files/fileId/export var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Authorizatio

我有一个简单的设置:带有服务器端服务的客户端UI

客户端负责文件夹/文件之间的用户交互。服务器负责保存提供的文件
id
mimeType

目前,我能够将谷歌文档、演示文稿、电子表格、图纸导出为文件和任何二进制格式的文件

GET https://www.googleapis.com/drive/v3/files/fileId/export

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var response = await httpClient.GetAsync(string.Format("https://www.googleapis.com/drive/v3/files/{0}/export?alt=media&mimeType={1}", fileid, mimeType));
var file = await response.Content.ReadAsStreamAsync();
/* save file using apropriate method/logic */
现在我正在尝试下载和保存文件夹

如果我们考虑到Google文件夹在下载到浏览器之前被视为另一个文件,并与Google Drive zipping文件夹相结合。我的想法是使用相同的
export
端点让Google返回一个zip文件

GET https://www.googleapis.com/drive/v3/files/{folder_id}/export?alt=media&mimeType=application/zip
但事情并非如此简单

code: 403
domain: global
reason: fileNotExportable
message: Export only supports Google Docs.
在尝试了几种不同的模拟类型并收到相同的错误后,我得出以下结论

  • 文件夹导出操作受到限制或未启用/支持
  • 我必须访问不同的端点
  • 我必须提供额外的参数
  • 使用正确的mimeType值
如果这里有谷歌专家,您能否确认:

  • 如果可以导出文件夹(压缩文件就可以了)
  • 实现这一点需要什么(端点/参数/mimeType)

  • 下面的解决方法如何

    1.回答你的问题 将文件夹导出为压缩文件 不幸的是,使用GoogleAPI,文件夹不能直接导出为压缩文件。例如,当您想将文件夹导出为压缩文件时,下面的解决方法如何

    • GoogleApps脚本(GAS)中有类实用程序的zip()方法。此外,还有网络应用作为一种使用外部天然气的服务。我认为你想做的事情可以通过结合它们来实现。
      • 详细信息如下所示
    下载zip文件。 可以使用
    GET的端点导出Google文档(电子表格、文档、幻灯片)https://www.googleapis.com/drive/v3/files/### 文件ID####/export
    。但是,与您的案例不同的不是谷歌文档的文件不能使用相同的端点导出。因此,请使用
    GET的端点https://www.googleapis.com/drive/v3/files/### 文件ID###?alt=media
    。在本例中,没有mimeType的参数

    参考资料:
    2.此解决方案的流程
  • 通过使用GET方法向Web应用发送文件夹ID,创建文件夹的压缩文件,并返回压缩文件的文件ID
  • 通过驱动器API下载压缩文件

  • 如果我误解了你的问题,我很抱歉。

    你建议的解决方法应该可以解决这个问题。直到你发帖我才知道有汽油。巧合的是,建议的代码几乎与我的.Net服务相同。干杯。如果你不介意我问的话,还有几件事。1) 如果同名的zip已经存在,会发生什么情况?脚本会覆盖它还是引发异常?2) 需要什么级别的授权?我正在开发一个web应用程序,它将被许多下载文件的用户访问。3) 有什么限制需要注意吗?文件大小还是权限?@iiminov感谢您的回复。我可以回答你的问题。A1:使用一个文件名作为示例。但文件名可以通过GET方法查询得到。所以你可以使用你想要的文件名。A2:当你使用网络应用时,你可以自由设置。如果使用GET方法创建zip文件,还可以在查询中设置密码。A3:您可以使用GAS自由设置权限。这些答案对实现你想要的有用吗?我在发表评论时有点措手不及。中的脚本非常完美。我所做的只是更改了
    zipfilename
    的生成方式。直到几分钟前我发布了我的脚本,我才清楚权限是如何以及何时设置的。您只需要两个选项:1)脚本的运行方式(针对web应用程序或访问脚本的用户)和2)谁可以访问脚本(仅限您或具有internet连接的任何人)。很简单。