无法使用 Apps 脚本将 Google 驱动器中的图像添加到 Google 表单
Cannot add image from Google Drive to a Google Form using Apps Script
我正在尝试以编程方式将我的 Google 驱动器中的图像添加到 Google 表单。我可以通过使用 google 示例使用对静态图像 URL 的引用来使其工作,例如:
var img = UrlFetchApp.fetch('https://www.google.com/images/srpr/logo4w.png');
form.addImageItem().setImage(img);
这有效 o.k。但我想引用我的 Google 云端硬盘帐户中的图片。
如果我尝试将图像共享 link 用于 Google 驱动器图像,我会收到错误消息:
var img = UrlFetchApp.fetch("https://drive.google.com/open?id=0B_u2iAm1LaoZSHd1TTExcDFrbUU");
form.addImageItem().setImage(img);
ERROR: "Blob object must have an image content type for this
operation."
如果我尝试通过它的 ID 打开文件,我会得到一个不同的错误:
var img = DriveApp.getFileById("0B_u2iAm1LaoZSHd1TTExcDFrbUU");
form.addImageItem(img);
ERROR: "Could not add image, please wait a minute and try again."
我似乎找不到任何有关如何实现此目标或我做错了什么的文档。我尝试将 Google 驱动器中图像的共享设置更改为公开可用。我试图将静态图像 URL 转换为 Google 驱动器中的图像,但似乎唯一可用的 URL 是共享 URL holding/display 图片页面而非实际图片本身。
方法addImageItem
不带参数。它只是添加一个项目来保存要指定的图像。要指定该图像,请调用 setImage
,将 blob 作为参数传递。通过调用 File 对象的 getBlob
方法从 File 对象中获取 blob。
var img = DriveApp.getFileById("0B_u2iAm1LaoZSHd1TTExcDFrbUU");
var blob = img.getBlob();
form.addImageItem().setImage(blob);
抱歉,我想我发布了错误的代码段,所以实际上我正在做的是:
var img = DriveApp.getFileById("a_valid_drive_file_id_here");
var imageItem = form.addImageItem();
imageItem.setImage(img);
并出现 "Could not add image, please wait a minute and try again." 错误。
但是,我想我现在已经回答了我自己的问题,上面的示例(通过 ID 获取文件并调用 setImage)确实适用于存储在 Google 驱动器中的图像,但是如果图片太大。不幸的是,API 似乎没有指定任何大小限制,错误消息也不是很有用,而且也没有说明图像太大。
所以我不知道以这种方式添加的图像的大小限制是多少,但是如果其他人有同样的错误,请尝试减小图像文件的大小。
我正在尝试以编程方式将我的 Google 驱动器中的图像添加到 Google 表单。我可以通过使用 google 示例使用对静态图像 URL 的引用来使其工作,例如:
var img = UrlFetchApp.fetch('https://www.google.com/images/srpr/logo4w.png');
form.addImageItem().setImage(img);
这有效 o.k。但我想引用我的 Google 云端硬盘帐户中的图片。
如果我尝试将图像共享 link 用于 Google 驱动器图像,我会收到错误消息:
var img = UrlFetchApp.fetch("https://drive.google.com/open?id=0B_u2iAm1LaoZSHd1TTExcDFrbUU");
form.addImageItem().setImage(img);
ERROR: "Blob object must have an image content type for this operation."
如果我尝试通过它的 ID 打开文件,我会得到一个不同的错误:
var img = DriveApp.getFileById("0B_u2iAm1LaoZSHd1TTExcDFrbUU");
form.addImageItem(img);
ERROR: "Could not add image, please wait a minute and try again."
我似乎找不到任何有关如何实现此目标或我做错了什么的文档。我尝试将 Google 驱动器中图像的共享设置更改为公开可用。我试图将静态图像 URL 转换为 Google 驱动器中的图像,但似乎唯一可用的 URL 是共享 URL holding/display 图片页面而非实际图片本身。
方法addImageItem
不带参数。它只是添加一个项目来保存要指定的图像。要指定该图像,请调用 setImage
,将 blob 作为参数传递。通过调用 File 对象的 getBlob
方法从 File 对象中获取 blob。
var img = DriveApp.getFileById("0B_u2iAm1LaoZSHd1TTExcDFrbUU");
var blob = img.getBlob();
form.addImageItem().setImage(blob);
抱歉,我想我发布了错误的代码段,所以实际上我正在做的是:
var img = DriveApp.getFileById("a_valid_drive_file_id_here");
var imageItem = form.addImageItem();
imageItem.setImage(img);
并出现 "Could not add image, please wait a minute and try again." 错误。
但是,我想我现在已经回答了我自己的问题,上面的示例(通过 ID 获取文件并调用 setImage)确实适用于存储在 Google 驱动器中的图像,但是如果图片太大。不幸的是,API 似乎没有指定任何大小限制,错误消息也不是很有用,而且也没有说明图像太大。
所以我不知道以这种方式添加的图像的大小限制是多少,但是如果其他人有同样的错误,请尝试减小图像文件的大小。