2014-03-27 91 views
0

嗨,我徘徊做一些更美丽的可搜索和可靠的文件列表在我的驱动器。如何获取文件下载url

我做了一个fileVar.getDownloadUrl()但是当我打印到HTML的链接不存在。 我使用Logger.log()进行检查,并且URL不记录。

getUrl()确实可行,购买我也需要下载。

¿一些想法?

代码.GS

function getRecFol(folId){ 
    var l = []; 
    var fol = DriveApp.getFolderById(folId); 
    var arch = fol.getFiles(); 

    while (arch.hasNext()){ 
     var a = arch.next(); 
     //Logger.log(a.getId()); 
     l.push(a.getId());  
    }// fin primera parte 
    //segunda parte. 
    //Logger.log(resultado); 
    var fols = fol.getFolders(); 
    var l2 = []; 
    while (fols.hasNext()){ 
     var a = fols.next(); 
     //Logger.log('folder:'); 
     //Logger.log(a); 
     var b = getRecFol(a.getId()); 
    for (var i = 0;i < b.length;i++){ 
     l2.push(b[i]); 
    } 
    } 
    for (var i = 0;i < l2.length;i++){ 
     l.push(l2[i]); 
    } 
// Logger.log(resultado !=[]); 
    return l; 
} 
/* TIPO PARA EL OBJETO CON LA INFORMACION PARA EL HTML */ 
function listedFile(id,title,tipe,description,fold,update,vision,descarga){ 
    this.id = id; 
    this.title = title; 
    this.tipe = tipe; 
    this.description = description; 
    this.fold = fold; 
    this.update = update; 
    this.descarga = descarga; 
    this.vision = vision; 
} 

function getData(){ 

    var listaF = getRecFol('IdFolder'); 
    var listaO = []; 
    for (var i = 0; i < listaF.length ;i++){ 
    var f = DriveApp.getFileById(listaF[i]); 
    f.getDownloadUrl(); 
    var o = new listedFile(listaF[i],f.getName(),f.getMimeType(),f.getDescription(),f.getParents(),f.getLastUpdated(),f.getUrl(),f.getDownloadUrl()); 
    Logger.log(o.description); 
    listaO.push(o); 
} 
return listaO; 
    } 



    function doGet(){ 
    return HtmlService 
    .createTemplateFromFile('index') 
    .evaluate(); 
    }; 

HTML

<html> 
    <body> 
    Hello, world! 
    <ol> 
    <? var lista = getData(); 
    for (var i = 0; i < lista.length; i++){ ?> 
     <li> 
      <a href="<?= lista[i].descarga ?>"><?= lista[i].title ?></a> - <a href="<?= lista[i].vision ?>"> VER </a> 
     </li> 
     <ul> 
      <li><?= lista[i].description ?></li> 
     </ul> 
     <? } ?> 
    </ol> 
    </body> 
</html> 

回答

1

我测试你的代码,有几个问题吧,但我终于得到它的工作...

看起来getDownloadUrl()仅为可以实际下载的文件返回一个值,例如fi这不是Google文档,电子表格......但是“普通文件”(如果我敢用这个词)作为jpg,pdf,doc等等。

我没有在文档中发现这种情况,但也许我搜索得不好。

无论如何,这里是我用于测试的代码的简化版本,我在这里检查的文件夹包含3个Google文档文件和一个jpg图像,并且我只下载图像文件的downloadUrl。

index.htmldoGet()不变)

function getRecFol(folId){ 
    var l = []; 
    var fol = DriveApp.getFolderById('0B3qSFxxxxxxxxxxU3a2VFR2M'); 
    var arch = fol.getFiles(); 

    while (arch.hasNext()){ 
     var a = arch.next(); 
//  Logger.log(a.getId()); 
     l.push(a.getId());  
    }// fin primera parte 

    return l; 
} 
/* TIPO PARA EL OBJETO CON LA INFORMACION PARA EL HTML */ 
function listedFile(id,title,type,description,folder,update,url,download){ 
    this.id = id; 
    this.title = title; 
    this.type = type; 
    this.description = description; 
    this.folder = folder; 
    this.update = update; 
    this.url = url; 
    this.download = download; 
} 

function getData(){ 

    var listaF = getRecFol('Idfolderer'); 
    var listaO = []; 
    for (var i = 0; i < listaF.length ;i++){ 
    var f = DriveApp.getFileById(listaF[i]); 
    var o = new listedFile(listaF[i],f.getName(),f.getMimeType(),f.getDescription(),f.getParents(),f.getLastUpdated(),f.getUrl(),f.getDownloadUrl()); 
    Logger.log(JSON.stringify(o)); 
// Logger.log("f.getDownloadUrl() = "+f.getDownloadUrl()); 
    listaO.push(o); 
} 
return listaO; 
} 

有关的信息,这里是生成的日志(有点难以阅读,我同意^^)在这里我们可以看到,只有第一项有一个价值downloadUrl。 enter image description here

+0

非常感谢您,现在我可以在脚本中创建一个条件:如果没有下载url,请使用'.getUrl()'返回的内容。我会在我写的时候更新。 – OlegarioFuentes

+1

这将是一个很好的解决方案,我想...(thx为upvote,请考虑也接受它) –

+0

我'getRecFol'功能可能是一团糟,但它不仅需要文件夹内的文件,也需要内部文件夹中的所有文件。 – OlegarioFuentes

2

为了您的信息:有一种方式来创建一个特殊的“下载PDF文件”链接。使用这一个:

https://docs.google.com/feeds/download/documents/export/Export?id=*documentId*&exportFormat=pdf 

它很复杂,但工作。

相关问题