2015-11-11 2 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? Он делает именно то, о чем вы просите.

Однако, если вы хотите, чтобы воссоздать это для своих собственных целей, я хотел бы изменить ваше объявление переменной file читать как таковой:

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

при создании переменной folder, метод, который вы используете создает FolderIterator, а не одну папку. Вы должны вызвать метод next(), чтобы получить объект Folder.

Чтобы быть точным с вашим сценарием и избегать сохранения в папку с неправильным, но похожим именем, я бы рекомендовал передать идентификатор папки на ваш скрипт, а не в папку Name. Если передать папку 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); 

В дополнении к ответу Эрика, я также предоставил служебную функцию, которая проверяет, если папка существует. Он может использоваться повторно в любом проекте.

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; 
} 
Смежные вопросы