我正在尝试使用Google Apps脚本创建一个实际返回图像文件而不仅仅是文本的Web应用程序。我试着这么简单:
function doGet() {
var file = DriveApp.getFileById('[redacted]');
return file;
}
将其作为Web应用程序发布并执行时,它只是说
脚本已完成,但未返回任何内容。
我知道该文件存在且可访问,因为我可以打印其MIME类型,这是一个正确的image/png
。所以我在这里遗漏了一些明显的东西,但是并不是特别精通Google Apps脚本,更不用说任何类型的网络开发了,我不知道我错过了什么,并且在搜索返回图像的介绍材料时来自Google Apps脚本也不是特别富有成效,特别是当我不确定从哪里开始时。
是否可以通过Google Apps脚本从网络应用返回图片文件?
答案 0 :(得分:2)
doGet()
特殊回调函数可以两种方式使用。最常见的方法是向浏览器提供HTML内容。如果doGet()
正在返回文件,则浏览器将不知道如何将其呈现为HTML。因此,在这种情况下返回的内容类型必须是有效的HTML。
doGet()
也可以与“内容服务”一起使用,以调用Apps脚本并返回某种内容。有一些方法可以将JSON,RSS和XML作为TextOutputs提供,但是没有MIME类型设置可以返回任何类型的文件类型。
如果文件可以转换为文本内容,返回,然后在浏览器中格式化,那么这是可能的。如果要返回类似图像文件的内容,则需要将图像转换为Blob,然后将blob作为字符串,然后返回字符串。
答案 1 :(得分:1)
函数doGet
必须返回HtmlOutput对象,而不是文件对象。使用HtmlService创建此类对象。示例:
function doGet() {
var html = '<img src = "https://googledrive.com/host/{file id}">';
return HtmlService.createHtmlOutput(html);
}
此示例将在2016年8月31日Google shuts down Drive Hosting之后不再有效。
因此,建议在其他地方托管静态内容,并使用Apps Script网络应用生成为其提供服务的HTML:
function doGet() {
var html = '<img src = "https://example.com/filename">';
return HtmlService.createHtmlOutput(html);
}