如何从 google 驱动程序脚本中的 post 请求接收 --data-binary

How to receive --data-binary from post request in google drive app script

这是我的请求

    curl --location --request POST 'https://script.google.com/macros/s/{My Web app url}/exec' \
--header 'Content-Type:  application/octet-stream' \
--header 'fileName: MyFileName' \
--header 'mimeType: application/octet-stream' \
--data-binary '@/Location/To/My/Local/File'

我正在尝试在我的 google 云端硬盘应用程序脚本中接收此请求

function doPost(e) {
  var data = Utilities.base64Decode(e.postData.contents); <---- having issue with this line
  var blob = Utilities.newBlob(data, e.postData.type, "TempFile");
  var fileId = DriveApp.createFile(blob);
  
  return ContentService.createTextOutput("fileName:"+fileName + " fileId:" + fileId);
}

该文件是二进制文件,不是图像不是 zip,而是其他类型的二进制文件

我需要写什么才能让它工作?

修改点:

  • 在 Web Apps 中,字符串值是从 doPost(e) 的事件对象 e 中检索的。在这种情况下,当使用你的curl命令时,我认为可能是由于字符编码的问题导致二进制数据无法正确发送。我很担心这个。
  • 而且,当我看到您的 Web Apps 脚本时,您正在尝试解码 base64 数据。但是 curl 命令没有将文件数据作为 base64 发送。
  • 在您的脚本中,似乎没有声明 fileName
  • 在Web Apps,在现阶段,不幸的是,Web Apps端无法获取到请求头。好像这是目前的规范。

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

修改后的 curl 命令:

为了将文件数据作为base64数据发送,下面修改的curl命令怎么样?

curl --location 'https://script.google.com/macros/s/{My Web app url}/exec' \
--header 'Content-Type: application/octet-stream' \
--data '{"file":"'"$(base64 /Location/To/My/Local/File)"'","filename":"sampleFilename"}'
  • 通过这个curl命令,文件被转换为base64数据并发送到Web Apps。

已修改 Google Apps 脚本:

为了使用上面curl命令的数据,下面的修改怎么样?

function doPost(e) {
  var contents = JSON.parse(e.postData.contents.replace(/\n/g, ""));
  var fileName = contents.filename;
  var data = Utilities.base64Decode(contents.file);
  var blob = Utilities.newBlob(data, e.postData.type, fileName);
  var fileId = DriveApp.createFile(blob);
  return ContentService.createTextOutput("fileName:" + fileName + " fileId:" + fileId);
}

注:

  • 在您的 Web Apps 脚本中,fileName 未声明。所以文件名是用 curl 命令发送的。
  • 当您修改 Google Apps 脚本时,请将部署修改为新版本。这样,修改后的脚本就会反映到 Web 应用程序中。请注意这一点。
  • 您可以在“Redeploying Web Apps without Changing URL of Web Apps for new IDE”的报告中看到详细信息。

参考文献: