Google Drive API v3:没有办法获取Google文档的下载网址?

时间:2017-04-22 00:33:27

标签: google-drive-api google-api-v3

Google Drive API v2到v3 migration guide说:

  

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

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

我如何在v3中完成相同的操作?如果不可能,为什么删除这个有用的功能?

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

修改

  

在v3中无法获取文件的公共短期URL吗?

对于常规文件,显然是的

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

对于谷歌应用文件,没有(甚至不是私有的,因为曾经是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(具有强制access_token)等原始API调用构建链接将是一个非常接近的解决方法(它是临时的和公开的,无论如何都不一样)。但是,命名问题使它失效。

在v2中,常规文件包含WebContentLink,而google apps文件包含exportLinks。在第3版exportLinks已经消失,我没有看到任何合适的替代方案。

2 个答案:

答案 0 :(得分:1)

我认为你过分强调单词"方法"。

还有一个导出文件的链接,它是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?

答案 1 :(得分:0)

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