如何从Google Apps脚本网络应用返回图片?

时间:2016-04-18 16:50:46

标签: web-applications google-apps-script

我正在尝试使用Google Apps脚本创建一个实际返回图像文件而不仅仅是文本的Web应用程序。我试着这么简单:

function doGet() {
    var file = DriveApp.getFileById('[redacted]');
    return file;
}

将其作为Web应用程序发布并执行时,它只是说

  

脚本已完成,但未返回任何内容。

我知道该文件存在且可访问,因为我可以打印其MIME类型,这是一个正确的image/png。所以我在这里遗漏了一些明显的东西,但是并不是特别精通Google Apps脚本,更不用说任何类型的网络开发了,我不知道我错过了什么,并且在搜索返回图像的介绍材料时来自Google Apps脚本也不是特别富有成效,特别是当我不确定从哪里开始时。

是否可以通过Google Apps脚本从网络应用返回图片文件?

2 个答案:

答案 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);
}