Google Drive API v3:没有任何方法可以获取 google 文档的下载 url?

Posted

技术标签:

【中文标题】Google Drive API v3:没有任何方法可以获取 google 文档的下载 url?【英文标题】:Google Drive API v3 : there isn't any way to get a download url for a google document? 【发布时间】:2017-04-22 00:33:27 【问题描述】:

Google Drive API v2 到 v3 migration guide 说:

exportLinks 字段已从文件中删除。要导出 Google 文档,请改用 files.export 方法。

我不想立即导出(下载)文件。 “files.export”实际上会下载文件。我想要一个链接来下载文件,稍后。这在 v2 中可以通过 exportLinks 实现。

如何在 v3 中实现相同的功能?如果不可能,为什么要删除这个有用的功能?

此外,(与上述类似的问题)downloadUrl 也被删除,建议的替代方法(“files.get with ?alt=media”)下载文件而不是提供下载链接。这意味着在 v3 中无法获取文件的公共短期 URL?

编辑:

在 v3 中没有办法获取文件的公共短期 URL?

对于常规文件,显然是的

这似乎工作正常(一个公共的短期链接到具有正确名称和内容的文件): https://www.googleapis.com/drive/v3/files/ID?alt=media&access_token=TOKEN

对于 google 应用程序文件,没有(甚至不是私有的,因为 v2 exportLinks 曾经是)

https://www.googleapis.com/drive/v3/files/ID/exportmimeType=TYPEv&access_token=TOKEN

与常规文件类似,此 URL 是指向文件内容的短暂链接,但缺少正确的名称。

顺便说一句,我看到 API 的行为不一致:/drive/v3/files/FILEID 提供了正确的文件名,但 /drive/v3/files/FILEID/export 没有。

我认为 API 本身应该设置正确的 Content-Disposition,就像它在发出 /drive/v3/files/FILEID 调用时所做的那样。

此文件命名问题使 v3 中缺少 ExportLinks 的解决方法无效。

v2 ExportLinks 允许我链接文件(这与立即获取其内容不同)。任何登录并具有适当权限的人都可以访问它,并且该链接不需要任何 access_token,而且它不是短暂的。很好用。

使用像/drive/v3/files/FILEID/export 这样的原始 API 调用(带有强制 access_token)建立一个链接将是一个足够接近的解决方法(它是临时的和公共的,无论如何都不一样)。但是,命名问题使其无效。

在 v2 中,常规文件具有 WebContentLink,而 google 应用程序文件具有 exportLinks。在 v3 中,exportLinks 消失了,我没有看到任何合适的替代方案。

【问题讨论】:

你能检查一下这个link @MuratGüner,“files.export”将下载文件。我想要一个下载文件的链接,因为它曾经在 v2 中。下载文件的 url(您可以在 v2 中拥有的内容)和文件内容本身(您在 v3 中使用 files.export 获得的内容)不是一回事。 迁移中的此声明“exportLinks 字段已从文件中删除。要导出 Google 文档,请改用 files.export 方法。”这意味着唯一的方法是 files.export 方法。 2019 年 1 月初,我注意到 Drive API v3 中添加了 exportLinks。您可以在the official document 看到它。这些链接似乎与 v2 的链接相同。如果要找回exportLinks,请将其添加到fields。如果这不是您想要的,我很抱歉。 非常感谢您发布这个问题!这是我实现 v3 Drive 应用程序所需的最后一点信息。 【参考方案1】:

通过 id 查询文件后,您可以使用函数 getWebContentLink() 获取文件的下载链接(例如 $file->getWebContentLink() )。

【讨论】:

【参考方案2】:

我认为您过于强调“方法”这个词。

还有一个导出文件的链接,它是https://www.googleapis.com/drive/v3/files/fileIdxxxxx/export&mimeType=xxxxx/xxxxx。确保您对 MIME 类型进行 URL 编码。

例如

https://www.googleapis.com/drive/v3/files/1fGBQ81haNU_nEiC5GITZD3bxT0ppL2LHg-C0ubD4Q_s/export?mimeType=text/csv&access_token=ya29.Gmo0BMvO-pVEPKsiD9j4D-NZVGE91MChRvwOcBSg3cTHt5uAClf-jFxcovQScbO2QQhwHS95eSGW1eQQcK5G1UQ6oI4BFEJJkntEBkgriZ14GbHuvpDL7LT2pKA--WiPuNoDDIuZMm5lWtlr

这些链接构成 API 的一部分,因此期望您编写了一个发送经过身份验证的请求并处理响应数据的客户端。这就解释了为什么如果您只是将链接粘贴到没有access_token 的浏览器中,它就会失败。它还解释了为什么文件名是export,即。您的客户端并不打算使用文件名,而是应该将数据作为流接收。这个 SO 答案更详细地讨论了这种情况How to set name of file downloaded from browser?

【讨论】:

我得到 404(未找到),我知道 fileid 是正确的。 为我工作。您能否粘贴您使用的链接并确认您为您尝试访问的文件包含正确的访问令牌。我已经用我刚刚用来确认它有效的链接更新了答案 啊!访问令牌丢失。现在一切都很好。谢谢。我还验证了我可以对常规文件执行相同的操作。即 https://www.googleapis.com/drive/v3/files/ FILEID ?alt=media &access_token=ACCESSTOKEN。这是现在缺少的 downloadUrl 的一个很好的替代品 还有一件事...我从这个 URL 获得的文件名为“export”。我应该在 URL 中添加什么来获取实际项目的名称? 如果答案是正确的,你应该接受它。我已经用更多信息更新了它以处理您的补充问题。

以上是关于Google Drive API v3:没有任何方法可以获取 google 文档的下载 url?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 和 Google Drive API V3 将文件上传到共享的 Google Drive 位置?

从 Google Drive V3 API 中的回收站恢复文件时未设置时间戳

Google Drive API v3-将文档转换为pdf

如何通过 Google Drive .NET API v3 使用服务帐户访问 Team Drive

Google Drive API v3 Python文件中缺少某些文件()。list()

文件移动 Google Drive API v3 PHP