使用REST API v3从Google云端硬盘下载文件夹

时间:2017-11-09 14:35:39

标签: c# rest google-drive-api

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

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

目前,我可以将Google文档,演示文稿,电子表格,绘图作为文件和任何二进制格式文件导出。

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压缩文件夹。我的想法是使用相同的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.

在尝试了几个不同的mimeTypes并收到相同的错误后,我得出以下结论。

  • 文件夹导出操作受限制或未启用/支持
  • 我必须访问不同的端点
  • 我必须提供其他参数
  • 使用正确的mimeType值

如果这里有任何谷歌大师,你可以确认:

  1. 如果可以导出文件夹(因为压缩文件很好)
  2. 实现此目的所需的(endpoint / parameters(s)/ mimeType)

1 个答案:

答案 0 :(得分:2)

以下解决方法如何?

1。回答你的问题

将文件夹导出为压缩文件

不幸的是,使用Google API时,文件夹无法直接导出为压缩文件。如果要将文件夹导出为压缩文件,例如,以下解决方法如何?

  • Google Apps脚本(GAS)中有类实用程序的zip()方法。还有Web Apps作为从外部使用GAS的服务。我认为通过组合它们可以实现您想要做的事情。
    • 详细信息为here

下载zip文件。

可以使用GET https://www.googleapis.com/drive/v3/files/### file ID ###/export的端点导出Google文档(电子表格,文档,幻灯片)。但是,与您的案例不同的Google文档的文件无法使用相同的端点导出。所以请使用GET https://www.googleapis.com/drive/v3/files/### file ID ###?alt=media的端点。在这种情况下,没有mimeType的参数。

参考文献:

2。此解决方法的流程

  1. 通过使用GET方法将文件夹ID发送到Web Apps,创建该文件夹的压缩文件,并返回压缩文件的文件ID。
  2. 按照Drive API下载压缩文件。
  3. 如果我误解了你的问题,我很抱歉。