如何使用Google Apps脚本显示Google云端硬盘图片?

时间:2012-06-19 08:36:10

标签: google-apps-script

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

  

//第一个Google Doodle!     app.add(app.createImage( “http://www.google.com/logos/googleburn.jpg”));

但如果我尝试从自己的Google文档中获取网址,则图片无法加载:

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

返回的网址不是直接映射到图片,而是某种Google Docs容器:

  

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

5 个答案:

答案 0 :(得分:4)

我知道这里有一个公认的答案,但是自从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 ?>" />

再次请注意,必须公开提供资源才能在Google网站/应用程序脚本/其他任何内容上允许使用图片。您可以使用File.setSharing API方法通过getAssets()设置它,但我发现在上传时设置权限并不是很有用。

答案 1 :(得分:2)

是的,您无法使用存储在Google文档中的图片。图片网址应该是该图片的热链接(直接链接)。

app.createImage('YOUR_IMAGE_HOT_LINK_URL');

答案 2 :(得分:1)

即使是来自Google协作平台,Google文档等Google服务,也无法通过经过身份验证的网址在UiApp中显示图片。Issue #912会对此进行记录。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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