首页 > 解决方案 > 从 base64 图像 URL 为 Google Apps Script MailApp 创建一个 inlineImage blob?

问题描述

我有一个内置在 Google Apps 脚本中的登录表单,可将​​数据发送到 Google 表格中的一行。但是,如果用户尝试登录不在预设列表中,它会向店员发送一封电子邮件。登录电脑有网络摄像头,GAS表格可以激活网络摄像头并拍照;它返回图像数据的 base64 编码字符串(jpeg 格式)。

我正在努力让 GAS 创建适当的 Blob,以将其作为 inlineImage 添加到电子邮件中。

      var userImgBlob = Utilities.newBlob()
        .setContentType("image/jpeg")
        .setDataFromString(Utilities.base64Decode(imgTxt.slice(23)))
        .setName("userImgBlob");

imgTxt 包含数据:URI,如下所示:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgM....

切片前 24 个(0 到 23)个字符会删除标题,因此它只是图像数据。然而,这会导致脚本失败。(注释掉这一部分可以让脚本的其余部分运行良好。)

我的定义有什么错误?

注意:我已经查看了如何使用 MailApp 在电子邮件中包含内联图像。我的问题有点不同,因为在那篇文章中,用户正在从网络上获取 URL。这是我正在使用的 data: URI。

标签: google-apps-scriptgoogle-sheetsbase64

解决方案


嗯,$%&$#。现在我觉得很笨。因此,我在其他地方看到的一个脚本创建了一个 newBlob(),然后在创建后设置参数。

原来该Utilities.newBlob()函数不喜欢没有参数的创建。

把它放在一个声明中:

var userImgBlob = Utilities.newBlob(Utilities.base64Decode(imgTxt.slice(23)),"image/jpeg","userImgBlob");

和繁荣 - 鲍勃是你的叔叔。

参考: 类实用程序 - 应用程序脚本


推荐阅读