Google Script base64解码并将文件保存到云端硬盘

时间:2017-09-29 05:55:17

标签: google-apps-script google-drive-api base64 google-sheets-api

我在Google表格脚本中收到了base64encoded图片。我可以通过记录

成功生成图像
e.postData.contents

然后使用https://www.base64decode.org/解码并生成.jpg文件。但是当我尝试在google脚本中进行解码并将jpg文件写入驱动器时,它已损坏。它看起来很相似,但是插入了一些替换字符。这是我的代码:

function doPost(e) {
  var decoded = Utilities.base64Decode(e.postData.contents, Utilities.Charset.UTF_8);
  var blob = Utilities.newBlob(decoded);
  DriveApp.createFile('img_'+date+'.jpg', blob.getDataAsString('Windows-1252'), MimeType.JPEG);
}

我也试过blob.getAs('image/jpeg'),但这只返回一个包含文字Blob的4字节文件。

有什么想法吗?我尝试过几个不同的字符集,Windows-1252似乎给出了最接近的结果。

1 个答案:

答案 0 :(得分:2)

这个示例脚本怎么样?使用此功能时,请定义date。在我的测试中,我也可以确认base64编码的jpeg文件可以在https://www.base64decode.org/解码。

当您更新doPost()时,请注意以下事项。请将您的脚本重新部署为Web Apps作为新版本。如果未执行此操作,则不会更新已部署的Web应用程序的脚本。

示例脚本:

function doPost(e) {
  var decoded = Utilities.base64Decode(e.parameters.contents, Utilities.Charset.UTF_8);
  var blob = Utilities.newBlob(decoded, "image/jpeg", 'img_'+date+'.jpg'); // Please define date.
  DriveApp.createFile(blob);
}

卷曲样本:

如果您想使用curl尝试doPost(),可以使用以下命令。当您使用它时,请输入base64编码文件和Web Apps URL的文件名。

curl -L -F "contents=`cat ### Filename ###`" "https://script.google.com/macros/s/#####/exec"

如果我误解了你的问题,我很抱歉。