2014-03-27 125 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 

它很複雜,但工作。

相關問題