2015-11-11 50 views
1

我需要使用GS下載圖像並將其保存在特定的驅動器文件夾中。 我能夠將圖像保存在根文件夾,但我不能把它保存在一個特定的文件夾:Google腳本:下載網頁圖像並將其保存在特定的驅動器文件夾中

function downloadFile(fileURL,folder) { 

    var fileName = ""; 
    var fileSize = 0; 

    var response = UrlFetchApp.fetch(fileURL, {muteHttpExceptions: true}); 
    var rc = response.getResponseCode(); 

    if (rc == 200) { 
    var fileBlob = response.getBlob() 
    var folder = DriveApp.getFoldersByName(folder); 
    if (folder != null) { 
     var file = DriveApp.createFile(fileBlob); 
     fileName = file.getName(); 
     fileSize = file.getSize(); 
    } 
    } 

    var fileInfo = { "rc":rc, "fileName":fileName, "fileSize":fileSize }; 
    return fileInfo; 
} 

問:我有什麼要添加到使用變量「文件夾」?

我發現了很多與「文檔列表」類的例子是不再使用

非常感謝

回答

0

你熟悉this app?它完全符合你的要求。當您創建變量folder

var file = folder.next().createFile(fileBlob); 

,您使用的方法:

但是,如果你想爲自己的目的來重新創建此,我會改變你的變量file的聲明解讀爲這樣的創建一個FolderIterator,而不是一個文件夾。您必須致電next()方法才能獲得Folder對象。

爲了確切地使用腳本並避免保存到名稱不正確但名稱相似的文件夾,我建議將文件夾ID傳遞到您的腳本而不是文件夾名稱。如果傳遞的文件夾ID,你可以聲明folder爲:

var folder = DriveApp.getFolderById(folder); 

,然後繼續腳本如你它寫。我希望有所幫助。

0

處理類似的問題,我想出了下面的解決方案將文件保存到文件夾。如果該文件夾不存在,創建它,否則它節省了由「FOLDER_NAME」

var folderExists = checkFolderExists("FOLDER_NAME"); 

    if (folderExists) { 
    saveFolder = DriveApp.getFolderById(folderExists); 
    } else { 
    saveFolder = DriveApp.createFolder("FOLDER_NAME"); 
    } 

    // Make a copy of the file in the root drive. 
    var file = DriveApp.getFileById(sheetID); 
    // Take the copy of the file created above and move it into the folder: 
    var newFile = DriveApp.getFolderById(saveFolder.getId()).addFile(file); 

    // Remove the copy of the file in the root drive. 
    var docfile = file.getParents().next().removeFile(file); 

繼Eric的回答指定的文件,我還提供了一個檢查,如果該文件夾存在一個效用函數。它可以在任何項目中重用。

function checkFolderExists(fName) { 
    try { 
    var folderId; 
    var folders = DriveApp.getFolders(); 

    while (folders.hasNext()) { 
     var folder = folders.next(); 
     folderName = folder.getName(); 
     if (folderName == fName) { 
     folderId = folder.getId(); 
     } 
    } 
    } catch(e) { 
    log("Services::checkFolderExists()" + e.toString()); 
    throw e; 
    } 
    return folderId; 
} 
相關問題