【问题标题】:Google Apps Script returns Sorry, unable to open the file at this time. Please check the address and try againGoogle Apps 脚本返回抱歉,此时无法打开文件。请检查地址并再试一次
【发布时间】:2018-07-15 20:45:46
【问题描述】:

我正在尝试POST 一个对简单应用脚本的请求。 代码如下:

var BACKEND_URL = "https://script.google.com/macros/s/AKfycbyYAWMv6O8Xld1EvqPuBk9EgxgfpVNly3dyX3JkSc3h/dev";
data = {"obj1": "data1", "obj2": "data2"};
function doGet() {
  var resp = UrlFetchApp.fetch(BACKEND_URL, {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(data),
    'muteHttpExceptions': true
  });
  Logger.log(resp);
}

这是应该接受 POST 请求的服务器的代码:

function doGet() {
}

function doPost(e) {
  Logger.log("posted");
  return;
}

注意:URL 中没有用户部分,所以这个问题与 SO 中发布的类似问题不同。

作为响应,获取一个 html 页面,其中说对不起,对不起,目前无法打开文件。请检查地址,然后重试。

我重新检查了该页面,它确实存在。

【问题讨论】:

  • 不确定 URL 后面的 /dev 到底是做什么的(我对 Google API 并不精通),但如果你省略它或将其更改为 /edit 会发生什么?我对遇到与沙盒有关的类似问题有一个模糊的回忆,即 /dev url 不是“实时”url。
  • 使用exit或者dev都是一样的。 Dev 用于开发,exec 用于生产。

标签: google-apps-script web-applications


【解决方案1】:

在您的情况下,doGet() 包括UrlFetchApp.fetch() 的项目与 doPost(e) 的项目不同。你想通过运行doGet() 调用doPost(),包括UrlFetchApp.fetch()。如果我理解您的情况是正确的,您能否确认以下几点。

  • 您正在使用的BACKEND_URL 包括dev。这用于使用最新的代码。但有如下限制。因此,请尝试使用 Current web app URL,例如 https://script.google.com/macros/s/#####/exec。

    第二个是标记为最新代码的链接,以 /dev 结尾。此 URL 只能由对脚本具有编辑权限的用户访问。此应用实例始终运行最近保存的代码(不一定是正式版本),旨在在开发过程中进行快速测试。

  • 在Web Apps中,当没有返回消息时,返回The script completed but did not return anything.的错误消息。如果您想获取返回信息,请使用Content Service进行设置。

  • 当Web Apps端的脚本被修改时,请重新部署Web Apps作为新版本。这样,最新的脚本就会反映到 Web Apps。

参考资料:

编辑:

在部署 Web 应用时,请尝试以下设置。

  • “我”表示“将应用程序执行为:”
  • “任何人,甚至是匿名的”用于“谁有权访问应用程序:”

【讨论】:

  • 我也用过exec,没区别。
  • 另外,我不确定每次发生更改时您都需要使用新版本重新部署应用程序。 IMO,您可以使用相同的版本进行更新。
  • 它没有帮助,不幸的是:(谢谢你的帮助!
  • @elena 对于给您带来的不便,我深表歉意。我没有注意到你已经尝试过 exec。我为我糟糕的英语水平感到抱歉。我更新了我的答案。你能确认一下吗?关于Web Apps的重新部署,在您的情况下,当您修改doPost(e)时,请将其重新部署为新版本。顺便问一下,我对您的情况的理解正确吗?
  • @elena 虽然我不确定这是否会成为您的情况的参考,但我确认在我的环境中,当使用包含dev 的端点时,会出现Sorry, unable to open the file at this time. 的错误。但是当使用包含exec的端点时,由于没有返回值,会出现The script completed but did not return anything.的错误。当return ContentService.createTextOutput('ok') 用于doPost(e) 时,不会出现错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 2013-01-13
  • 2013-11-02
  • 2015-03-11
  • 2014-06-06
  • 2016-02-11
相关资源
最近更新 更多