2014-03-27 3 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.html 및 변경 doGet()) 정보에 대한

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

그건 좋은 해결책이 될 것 같아요 ... (upvote에 대한 thx, 그것을 받아 들일 수도 고려하시기 바랍니다) –

+0

내'getRecFol' 함수는 어쩌면 엉망이지만 폴더 안의 파일뿐만 아니라 내부 폴더의 모든 파일 . – OlegarioFuentes

2
귀하의 정보를

: 링크 특별한 "PDF로 다운로드"를 만들 수있는 방법이이 입니다. 다음을 사용하십시오 :

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

복잡하지만 작동합니다.