Google Drive API v3:没有办法获取Google文档的下载链接吗?

5
Google Drive API v2 到 v3 的migration guide指出:

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

我不想立即导出(下载)文件。"files.export"实际上会下载该文件。我想要稍后下载该文件的链接。在v2中,通过exportLinks可以实现此功能。
如何在v3中实现相同的功能?如果不可能,为什么要删除此有用的功能?
此外,(类似上面的问题)downloadUrl也已被删除,建议使用替代方法(“带有?alt = media的files.get”)下载该文件,而不是提供下载链接。这意味着在v3中没有办法获取文件的公共短期URL吗?
编辑:

对于常规文件,显然是可以的。

这似乎很好用(文件的公共短暂链接,带有正确的名称和内容): https://www.googleapis.com/drive/v3/files/ID?alt=media&access_token=TOKEN 对于Google Apps文件,则不行(即使是私有的,就像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调用构建链接将足够接近解决方法(它是临时的和公共的,不同于以前)。但是,命名问题使其无效。

在v2中,普通文件具有WebContentLink,而Google应用程序文件具有exportLinks。在v3中,exportLinks已经消失了,我没有看到任何合适的替代方法。

1
您能否检查此链接 - eisbach
@MuratGüner,“files.export”将下载文件。我想要一个下载文件的链接,就像在v2中一样。一个用于下载文件的URL(在v2中可以使用),以及文件本身的内容(在v3中使用“files.export”获取)并不是同一件事情。 - horacioj
这个迁移声明中说:“exportLinks”字段已经从文件中删除。要导出Google文档,请使用“files.export”方法。这意味着唯一的方法是使用“files.export”方法。 - eisbach
1
在2019年1月初,我注意到“exportLinks”被添加到Drive API v3中。您可以在官方文档中看到它。这些链接似乎与v2的链接相同。如果您想检索“exportLinks”,请将其添加到“fields”中。如果这不是您想要的,请原谅。 - Tanaike
非常感谢您发布这个问题!这是我实现v3驱动应用程序所需的最后一点信息。 - NobleUplift
2个回答

3

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


在.NET中,它是一个名为“WebContentLink”的属性。它返回一个字符串。 - Ole EH Dufour
如果您已登录,则此方法有效,但是来自v2的getDownloadUrl()似乎需要API密钥。 webContentLink是一个https://drive.google.com URL,而v2的getDownloadUrl()返回了一个https://www.googleapis.com URL。 - scorgn

0

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

仍然有一个导出文件的链接,它是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答案更详细地讨论了这种情况 如何设置从浏览器下载的文件的名称?


我收到了404(未找到)的错误,但我知道文件ID是正确的。 - horacioj
可以,你能复制粘贴你使用的链接并确认你包含了正确的访问令牌以访问你正在尝试访问的文件吗?我已经更新了答案,并附上了我刚刚使用的链接以确认它有效。 - pinoyyid
1
啊!访问令牌丢失了。现在一切都好了。谢谢。 我还验证了我可以对常规文件做同样的操作。即 https://www.googleapis.com/drive/v3/files/FILEID?alt=media&access_token=ACCESSTOKEN。这是现在缺失的downloadUrl的一个很好的替代品。 - horacioj
请详细说明您认为v2 files.export链接和v2 exportLink链接有何不同。在先前的评论中,您说“现在一切都很好”。 v3 API是v2的一种简化版本,您说得对,某些功能确实缺失(例如etag)。这就是为什么v2仍然受支持的原因。 - pinoyyid
在评论中我说“现在一切都好了”,是因为我没有注意到文件命名问题(也就是,导出文件时它的名称并未保留)。我已经编辑了问题并增加了一些澄清。 - horacioj
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接