使用Google Apps脚本POST方法将文件上传到Google云端硬盘

时间:2020-07-15 12:28:38

标签: curl google-apps-script

我创建了一个脚本,用于使用post方法将文件从本地上传到Google云端硬盘,我尝试使用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

1 个答案:

答案 0 :(得分:1)

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

修改点:

  • 在当前阶段,Web应用程序无法使用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应用程序的脚本后,请重新部署Web应用程序为新版本。这样,最新的脚本就会反映到Web应用程序中。请注意这一点。
  • 在这种情况下,作为测试情况,请如下设置Web Apps。
    • Execute the app as: Me
    • Who has access to the app: Anyone, even anonymous

参考文献:

相关问题