2

以下文档的图像部分

https://developers.google.com/apps-script/html_service

表示只能显示托管在公共 url 上的图像(由于使用图像代理)。

这是否适用于存储在用户谷歌驱动器中的图像?有什么方法可以将此类图像用作 HtmlService 元素?

4

4 回答 4

4

目前还没有一种方法可以满足您的要求。

于 2012-07-02T14:43:58.993 回答
1

听起来您正试图从 Google Drive 提供某种可公开访问的永久链接。

  • 打开文件。

  • 在文件菜单下,单击共享。

  • 在“谁有权访问”下,单击更改。 私人的

  • 选择“在网络上公开”。 共享选项

  • 单击完成,然后复制列出的链接。那是您应该为您工作的公开链接。 公共链接

于 2012-06-28T19:08:27.183 回答
0

您可以使用 base 64 编码嵌入图像。

function getFileBase64s(fileName) {
  var output = [];
  if (typeof fileName === 'string'){
    var fileIterator = DriveApp.getFilesByName(fileName);
    while (fileIterator.hasNext()) output.push(Utilities.base64Encode(fileIterator.next().getBlob().getBytes()));
  } else {
    SpreadsheetApp.getUi().alert('File name: '+fileName+' is not an string')
  };
  return output;
};

在您的 HTML 模板中:

<? getFileBase64s('fileName').forEach(function(fileBase64){ ?>
    <img src="data:image/png;base64,<?=fileBase64?>" >
<? }) ?>

于 2018-05-11T23:03:15.413 回答
0

当您使用 Advanced Drive Service 访问文件时,元数据有一个名为“thumbnailLink”的属性,该属性非常适合在 Html 服务中显示图像,尤其是在您不想公开共享的文件时。它也比 base64 方法快得多。该链接会在数小时内过期,因此您每次都需要重新提出请求。

对于单个图像,以下方法可以解决问题:

Drive.Files.get(id).thumbnailLink

对于多个图像,您可以使用高级驱动服务中的列表方法。例如,以下将访问给定 id 文件夹中的所有图像。

  var query =  "'"+id+"' in parents and mimeType contains 'image/'"
  var files;
  var pageToken;
    do {
      files = Drive.Files.list({
        q: query,
        maxResults: 300,
        pageToken: pageToken
      });
      if (files.items && files.items.length > 0) {
        for (var i = 0; i < files.items.length; i++) {
          var file = files.items[i];
          var title = file.title
          var src = file.thumbnailLink
        }
        
      }
      pageToken = files.nextPageToken;
    } while (pageToken);

您还可以通过将“s220”字符串替换为更大的数字来调整图像的大小,例如,src = src.replace("s220","s1000")。

于 2021-03-19T18:58:37.707 回答