【问题标题】:Google Script base64 decode and save file to DriveGoogle Script base64 解码并将文件保存到云端硬盘
【发布时间】:2017-09-29 05:55:16
【问题描述】:

我在 Google 表格脚本中收到 base64 编码的图像。我可以通过记录成功生成图像

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 似乎给出了最接近的结果。

【问题讨论】:

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


    【解决方案1】:

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

    当您更新doPost()时,请注意以下几点。请将您的脚本作为新版本重新部署到 Web 应用程序。如果不执行此操作,则不会更新已部署 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"
    

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

    【讨论】:

    • 非常好,谢谢Tanaike!所以我猜我的原始代码不起作用的原因是newBlob 需要知道contentType
    • @James B 欢迎您。也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    相关资源
    最近更新 更多