无法使用Google Apps帐户将Google云端硬盘中的图片添加到Google表单

问题描述:

我试图以编程方式将Google云端硬盘中的图片添加到Google表单中。我可以得到它使用静态图像URL参考使用谷歌的例子,如工作:无法使用Google Apps帐户将Google云端硬盘中的图片添加到Google表单

var img = UrlFetchApp.fetch('https://www.google.com/images/srpr/logo4w.png'); 
form.addImageItem().setImage(img); 

这工作O.K.但我想引用我的Google云端硬盘帐户中的图片。

如果我尝试并使用图像共享链接到谷歌Drive镜像我得到一个错误:

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云端硬盘中图片的共享设置以公开发布。我试图获得Google云端硬盘中图片的静态图片网址,但唯一可用的网址是共享网址,该网址位于图片的保留/显示页面,而不是实际图片本身。

对不起,我想我贴错代码段,所以实际上我在做什么是:

var img = DriveApp.getFileById("a_valid_drive_file_id_here"); 
var imageItem = form.addImageItem(); 
imageItem.setImage(img); 

并获得了“无法添加图片,请等待一分钟,然后再试一次”错误。

但是,我想我现在已经回答了我自己的问题,上面的示例(通过ID获取文件并调用setImage)是否适用于存储在Google Drive中的图像,但是如果图像太大,则会出现错误。不幸的是,API似乎没有指定任何大小限制,并且错误消息不是非常有用,并且再次没有说图像太大。

所以我不知道以这种方式添加的图像的大小限制是什么,但如果其他人有相同的错误,请尝试减小图像文件的大小。

+0

的确大小是我的问题!所以在你的问题的代码中,你可以做'form.addImageItem(img.getThumbnail());'如果你从'DriveApp'获得'img'。我的照片缩略图在表格中使用很好。 –

+0

感谢您的好答复。 –

方法addImageItem不带参数。它只是添加一个项目,将保存要指定的图像。要指定该图像,请致电setImage,将blob作为参数传递。通过调用它的getBlob方法从File对象获取blob。

var img = DriveApp.getFileById("0B_u2iAm1LaoZSHd1TTExcDFrbUU"); 
var blob = img.getBlob(); 
form.addImageItem().setImage(blob); 

我建议FormImageItem类文档的仔细阅读。