【问题标题】:JavaScript Upload file to Google Drive using Google Apps Script POST methodJavaScript 使用 Google Apps Script POST 方法将文件上传到 Google Drive
【发布时间】:2021-02-18 18:07:26
【问题描述】:

我创建了一个脚本来使用 post 方法将文件从本地上传到 Google Drive,我尝试使用 curl 上传,但它不起作用,我收到错误 Could not decode string.

Google Apps 脚本代码:

function doPost(e) {
  var folder, folders = DriveApp.getFoldersByName("Uploads");
  if (folders.hasNext()) {
    folder = folders.next();
  } else {
    folder = DriveApp.createFolder("Uploads");
  }
  var data = Utilities.base64Decode(e.parameters.data);
  var blob = Utilities.newBlob(data, e.parameters.mimetype, e.parameters.filename);
  var id = "Your File Download Link: https://drive.google.com/uc?id="+folder.createFile(blob).getId();
  return ContentService.createTextOutput(id)
}

我的 curl 命令:

curl -i -X POST -H 'Content-Type: multipart/form-data' -F 'data=test.png' https://script.google.com/macros/s/AKfycbwcGij0UNl8c9OJEpHbUvGF4KTJYbBOkDA9m882BLJVnWpFrc4/exec

【问题讨论】:

标签: curl google-apps-script


【解决方案1】:

我认为在您的情况下,需要同时修改 Google Apps 脚本和 curl 命令。

修改点:

  • 在当前阶段,Web Apps 无法使用multipart/form-data
  • 很遗憾,当您使用 curl 命令时,没有上传任何文件。
  • 在这种情况下,需要将文件转换为base64数据并作为字符串上传。
  • e.parameters 是数组。在这种情况下,请使用e.parameter

当以上几点反映到你的脚本和 curl 命令时,它变成如下。

修改后的脚本:

function doPost(e) {
  var folder, folders = DriveApp.getFoldersByName("Uploads");
  if (folders.hasNext()) {
    folder = folders.next();
  } else {
    folder = DriveApp.createFolder("Uploads");
  }
  var data = Utilities.base64Decode(e.postData.contents.split("data=")[1]);
  var blob = Utilities.newBlob(data, e.parameter.mimetype, e.parameter.filename);
  var id = "Your File Download Link: https://drive.google.com/uc?id="+folder.createFile(blob).getId();
  return ContentService.createTextOutput(id);
}

修改 curl 命令:

base64 test.png | curl -L --data-raw "data=$(</dev/stdin)" "https://script.google.com/macros/s/###/exec?filename=test.png&mimetype=image/png"
  • 请将https://script.google.com/macros/s/###/exec 的网址替换为您的网址。

注意:

  • 当您修改 Web Apps 的脚本时,请将 Web Apps 重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请注意这一点。
  • 在这种情况下,作为测试情况,请如下设置Web Apps。
    • Execute the app as: Me
    • Who has access to the app: Anyone, even anonymous

参考资料:

【讨论】:

  • 上传任何文件,哪个mime好?我的意思是imetype=
  • @Javad 感谢您的回复。我不得不为给您带来的不便道歉。在这种情况下,imetype=mimetype=。这是我的复制和粘贴错误。所以我修改了它。而且,如果我提出的方法对您的情况没有用处,我深表歉意。
  • @Javad 对于您的问题,我有什么可以做的吗?如果我的回答对您的情况没有用。我必须道歉并修改它。如果您能合作解决您的问题,我很高兴。我想考虑一下解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
相关资源
最近更新 更多