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
已经消失,我没有看到任何合适的替代方案。
答案 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())。