3

如果我使用 Google 教程页面中的以下内容来加载图像,它可以正常工作:

// 第一个谷歌涂鸦!app.add(app.createImage("http://www.google.com/logos/googleburn.jpg"));

但如果我尝试从自己的 Google Docs 获取 URL,则图像无法加载:

var image;
var url;    
var files = DocsList.getAllFiles();        
for (var i = 0; i < files.length; i++) {  
    url = files[i].getUrl();  
    app.add(app.createImage(image));  
    app.add(app.createLabel(url));  
}

返回的 URL 不是直接指向图像,而是某种 Google Docs 容器:

http://docs.google.com/a/--------.com/open?id=0B5B_X4WaXYC7cExRT3Nvb0hTamc

4

5 回答 5

5

我知道这里有一个公认的答案,但由于 UiApp 的弃用它不再准确。以下是读取给定 Google 驱动器目录并将每个公开可用图像通过具有现代 App Script API 的资产对象传递给模板的脚本。

function getAssets(driveDir) {
    var folders = DriveApp.getFoldersByName(driveDir);
    var folder = (folders.hasNext())? folders.next() : false ;
    var assets = {};
    if(folder){
        var files = folder.getFiles();
        while (files.hasNext()) {
            var file = files.next();
            var fileName = file.getName();
            assets[fileName] = 'https://drive.google.com/uc?export=view&id=' + file.getId();
        }
    }
    return assets;
}

doGet() 函数应包含资产

function doGet(e) {
    var form = HtmlService.createTemplateFromFile('form.html');
    form.assets = getAssets('Your-drive-folder-name');

    return form.evaluate();

}

最后在 HTML 模板中,您将可以通过以下代码访问您的资产:

 <img src="<?= assets.fileName ?>" />

再次记住,资产必须是公开的,才能在您的谷歌网站/应用程序脚本/任何内容上允许图像。您可以使用 File.setSharing API 方法通过 getAssets() 进行设置,但我发现设置上传权限并不麻烦。

于 2014-12-12T18:11:12.000 回答
2

是的,您不能使用存储在 Google 文档中的图像。Imgae URL 应该是该图像的热链接(直接链接)。

app.createImage('YOUR_IMAGE_HOT_LINK_URL');
于 2012-06-19T09:01:14.913 回答
1

在 UiApp 中显示来自经过身份验证的 URL 的图像是不可能的,即使来自站点、文档等 Google 服务也是如此。 问题 #912记录了这一点。

于 2012-06-19T18:11:47.547 回答
0

您可以将图像作为附件存储到 Google 协作平台页面,然后使用 Google Apps 脚本的站点 API 访问它。

于 2012-06-19T11:12:00.867 回答
0

实际上你可以这样做,但我担心它不是很可靠。当您单击查看容器中的下载按钮时,该链接将起作用。但是,您必须让图像公开可用。或将其分享给能够查看工作表或文档的所有用户。

于 2014-10-13T01:17:10.367 回答