【问题标题】:Unable to serve download links in google apps script无法在谷歌应用脚​​本中提供下载链接
【发布时间】:2014-11-30 02:30:48
【问题描述】:

更新:我找到了解决方案。这并不一定能解决所有情况,所以我将把这个问题留一小段时间,以防有人能启发我更多。我通过更改 url 的格式解决了这个问题:Google Drive 允许使用这种格式下载文件:

https://docs.google.com/uc?export=download&id=FILE_ID

所以我不知道这是否是其他 URL 的问题;实际上也不确切为什么 .getDownloadUrl() 不起作用......也许有人可以解释。但是现在这似乎在我可以测试的浏览器中工作......


我有一个简单的 WebApp 脚本,我通过添加 Apps Script 小工具在 Google 站点上运行它。该小工具的运行方式与以下表单示例完全相同:

https://developers.google.com/apps-script/guides/html/communication#forms

该小工具旨在执行以下操作:加载页面时,会返回一个表单,并且用户必须输入许可证密钥才能获得下载产品的链接。我的代码提供表单 OK,并获得表单提交 OK;然后它验证密钥,如果有效,则发回一个下载链接。一切正常;问题是,无论我尝试返回什么下载链接,caja iframe 包装器都会阻止点击链接实际下载文件。

我首选的返回 URL 实际上是通过 Drive API:下载文件在 Google Drive 上,我得到的下载链接如下:

DriveApp.getFileById(downloadFileId).getDownloadUrl()

但是,当在为 WebApp 小工具生成的 caja iframe 中单击返回的链接时,什么也没有发生。我已经尝试了一些其他 URL 格式指向 Drive 上的该文件,但没有任何内容可用于下载。

这可能吗?

【问题讨论】:

  • 如何显示下载链接?为它生成了什么html代码?您可以从您的应用程序中添加相关代码来生成并返回/显示您的问题的链接吗?问题可能在于您显示链接的方式和/或位置,而不是getDownloadUrl() 返回的链接。如果您将链接复制并粘贴到新的浏览器选项卡中会发生什么?那么文件会下载吗?

标签: google-apps-script google-caja


【解决方案1】:

.getDownloadUrl() 方法返回一个可用于下载文件的临时 URL。此 URL 仅在短时间内有效,之后它会过期并且不再返回文件 - 这可能是您的 Web 应用程序中的链接不起作用的原因。不记得 URL 的确切有效时间,但我认为它可能短至 5 分钟。

永久下载 URL 存储在另一个文件属性中:webContentLink。但是,此属性(尚)无法通过 Google Apps Drive Service 获得 - 您必须使用 Advanced Drive Service 访问它。 You can enable Drive API under Advanced Google services in your script。启用后就可以这样使用了:

var file = Drive.Files.get(FILE_ID_HERE);
var dlUrl = file.webContentLink;

这将返回与您在更新中找到并发布的链接一样的链接。使用 Drive API 获取链接而不是硬编码的一个优点是,如果 Google 更改了该 URL 的格式,您使用 Drive API 获取链接的代码将继续工作,而硬编码链接不会。

完整的 Drive Web API 参考(Advanced Drive Service 使用的)位于 https://developers.google.com/drive/v2/reference/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多