更新:我找到了解决方案。这并不一定能解决所有情况,所以我会在短时间内保持这个问题,以防万一有人能给我更多启发。我通过更改网址格式解决了这个问题:Google云端硬盘允许这种格式下载文件:
https://docs.google.com/uc?export=download&id=FILE_ID
所以我不知道这是否是其他网址的问题;也不确切地说.getDownloadUrl()无法正常工作...也许有人可以解释。但是现在这似乎适用于我可以测试的浏览器...
我有一个简单的WebApp脚本,我通过添加Apps脚本小工具在Google网站上运行该脚本。小工具的运行方式与:
上的Forms示例完全相同https://developers.google.com/apps-script/guides/html/communication#forms
小工具旨在执行以下操作:加载页面时,会返回表单,用户必须输入许可证密钥才能获得下载产品的链接。我的代码服务表单OK,并获取表单提交OK;然后它验证密钥,如果有效,则发回一个下载链接。一切正常;问题是,无论我尝试返回下载链接,caja iframe包装器都会阻止点击链接实际下载文件。
我首选的返回网址实际上是通过云端硬盘API:下载文件位于Google云端硬盘上,我得到的下载链接如下:
DriveApp.getFileById(downloadFileId).getDownloadUrl()
但是当在为WebApp小工具生成的caja iframe中单击返回的链接时,没有任何反应。我在驱动器上尝试了一些指向该文件的其他URL格式,但没有任何工作可供下载。
这可能吗?
答案 0 :(得分:1)
.getDownloadUrl()
方法返回可用于下载文件的临时 URL。此URL仅在很短的时间内有效,之后它将过期并且不再返回文件 - 这可能是您的Web应用程序中的链接无法工作的原因。无法准确记住网址的有效期,但我认为这可能只有5分钟。
永久下载URL存储在另一个文件属性中:webContentLink
。但是,此商家尚未通过Google Apps云端硬盘服务提供 - 您必须使用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更改了该网址的格式,那么使用Drive API获取链接的代码将继续有效,而硬编码链接不会。
Full Drive Web API参考(Advanced Drive Service使用的参考)位于https://developers.google.com/drive/v2/reference/。