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

cbo*_*tle 2 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));  
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 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;
}
Run Code Online (Sandbox Code Playgroud)

doGet()函数应包含资产

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

    return form.evaluate();

}
Run Code Online (Sandbox Code Playgroud)

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

 <img src="<?= assets.fileName ?>" />
Run Code Online (Sandbox Code Playgroud)

再次提醒您,资产必须公开可用,才能在您的Google网站/应用脚本/任何内容上使用。您可以使用File.setSharing API方法通过getAssets()进行设置,但是我发现设置上载权限并不是一件容易的事。