Перезаписать существующий файл в папке его именем (часть 2) - PullRequest
1 голос
/ 28 сентября 2019

При тестировании сценария таким способом, когда в папке SQUADS нет файла с именем, которое я хочу сохранить, он фактически сохраняется в папке SQUADS.

Однако при наличии файлас именем, которое я хочу, он сохраняет новый PDF-файл в основной папке Google Диска, правильным будет удалить существующий в папке SQUADS и сохранить в папке SQUADS

Чего-то не хватаети я до сих пор не понимаю, как я могу решить

    var token = ScriptApp.getOAuthToken();
    var docurl = UrlFetchApp.fetch(theurl, { headers: { 'Authorization': 'Bearer ' +  token } });
    var pdfBlob = docurl.getBlob();

    // Get filename from sheet "Work", cell "B5"
    var fileName = spreadsheet.getSheetByName("Gerais").getRange("H2").getValue();

    // Create file from blob and name it
    // The newFile is placed in the root folder by default
    var newFile = DriveApp.createFile(pdfBlob).setName(fileName);  

    // if folder exists use next 
    if (DriveApp.getFoldersByName("Squads").hasNext()){
      var folder = DriveApp.getFoldersByName("Squads").next();

      // if folder does not exist
    } else {
      var folder = DriveApp.createFolder("Squads");// new folder created in the root folder by default
    }

    //prepare new file and Squads folder;

    var existing = folder.getFilesByName(fileName); //returns file iterator;
    var hasFile = existing.hasNext(); //check if iterator isn't empty;
    if(hasFile) {
      var duplicate = existing.next(); //access file;

      //delete file;
      var durl = 'https://www.googleapis.com/drive/v3/files/'+duplicate.getId();
      var dres = UrlFetchApp.fetch(durl,'delete',{
        muteHttpExceptions: true,
        headers: {'Authorization': 'Bearer '+token}
      });
      if(dres.getResponseCode()>=400) {
        //handle errors;
      }
    }

    //continue: add file, remove from root, etc;

    folder.addFile(newFile); // add new file to folder
    DriveApp.removeFile(newFile); // remove file from root folder

Уже авторизован в соответствии с необходимостью в Ресурсы → Дополнительные услуги Google → Drive API V2

1 Ответ

2 голосов
/ 29 сентября 2019

Проблема

Удаление дубликата файла и создание нового файла в целевой папке.

Решение

Чтобы развернутьв части 1 и комментариях вы можете использовать метод createFile() в целевой папке, чтобы новый файл создавался непосредственно в нем, а не в корневом каталоге диска.Получившаяся модификация вашего скрипта должна выглядеть следующим образом:

В этом примере предполагается, что вы назвали расширенный сервис DriveAPI при его активации.Также обратите внимание, что объявление folder перемещено в область действия функции для правильного поведения (не объявляйте переменные в меньшем объеме [в вашем случае в выражении if...else], если вы собираетесь использовать их в более широком):

//...get token and Blob (do not create the file);

var fileName = spreadsheet.getSheetByName("Gerais").getRange("H2").getValue();

//Access or create the 'Squads' folder;
var folder; //declare folder;
var folders = DriveApp.getFoldersByName("Squads"); //returns iterator;
if(folders.hasNext()) {
  folder = folders.next();
}else {
  folder = DriveApp.createFolder("Squads");
}

//Remove duplicate file with the same name;
var existing = folder.getFilesByName(fileName); //returns iterator;
if(existing.hasNext()) {
  var duplicate = existing.next();

  //use either Drive API or Advanced service solution here;
}

//add file;
folder.createFile(pdfBlob).setName(fileName);

Усовершенствованное сервисное решение Drive

DriveAPI.Files.remove(duplicate.getId());

Решение Drive API

var durl = 'https://www.googleapis.com/drive/v3/files/'+duplicate.getId();
var dres = UrlFetchApp.fetch(durl,{
  method: 'delete',
  muteHttpExceptions: true,
  headers: {'Authorization': 'Bearer '+token}
});
if(dres.getResponseCode()>=400) {
  //handle errors;
}

Ссылка

  1. createFile() из Blob ссылка [Folder класс];
  2. Drive расширенный сервис ссылка ;
  3. Files ресурс ссылка [Drive public API];
  4. Часть 1 (см. Обработку параметров);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...