РАБОЧИЙ КОД ЗДЕСЬ:https://jsfiddle.net/nateomardavis/e0317gb6/
ОРИГИНАЛЬНЫЙ ВОПРОС НИЖЕ
Как удалить файл, отправленный из формы, с самого Диска?
У меня возникли проблемы с пониманием того, почему форма Google отправляет файлы как на мой диск (не в папку), так и в автоматически созданную папку отправки.
Мне удалось переместить переименованный файл в новую папку и удалить копию в автоматически созданной папке отправки. Я не могу понять, как удалить копию, которая только что указана на «Диске», а не в какой-либо папке.
ПРОЦЕСС (РЕДАКТИРОВАТЬ)
Позвольте мне попытаться объяснить процесс больше. У меня есть форма, которая собирает файлы. Google автоматически создает папку и подпапки. Я успешно переименовал отправленные файлы, переместил их в новую папку и удалил из папки, созданной Google. Однако копия исходного неизмененного файла отправляется на Google Диск, в корневую папку. Шаги 1–3 (ниже) работают должным образом. Шаг 4, где я сталкиваюсь с проблемами.
Исходный файл загружается в форму. Обратите внимание на имя файла.

Переименованный файл в новой папке. Исходный файл удаляется из папки выше.

Исходный файл теперь отображается на Диске не в папке, а там. Имя этого файла такое же, как и у первоначально загруженного. Тот, который попал в папку «passes», а затем был удален из этой папки.

СНИППЕТ
//RENAME PASSES
if (itemResponses[f].getItem().getTitle() == "PASSES") {
var files = itemResponses[f].getResponse();
//Logger.log(files.length);
if (files.length > 0) {
for (var n in files) {
var dFile = DriveApp.getFileById(files[n]);
dFile.setName("LSS - " + year + " - " + teamName + " - " + "PASSES - " + today );
teamFolder.addFile(dFile); //MOVE SUBMITTED DOCUMENTS TO THAT FOLDER
passesFolder.removeFile(dFile); //REMOVE FROM SUBMISSION FOLDER
DriveApp.getRootFolder().removeFile(dFile) // (DOES NOT WORK) REMOVE FROM DRIVE FOLDER
DriveApp.removeFile(dFile) // (DOES NOT WORK) REMOVE FROM DRIVE FOLDER
}
}
ПОЛНЫЙ КОД
function getLastResponse() {
var form = FormApp.openById('ID');
var today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy hh:mm a");
var year = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "YYYY");
Logger.log(today);
var formResponses = form.getResponses();
//Logger.log(formResponses.length);
var formResponse = formResponses[formResponses.length-1];
var respondentEmail = formResponse.getRespondentEmail()
var itemResponses = formResponse.getItemResponses();
Logger.log(itemResponses.length);
var teamName = itemResponses[2].getResponse();
//Logger.log("team name: " + teamName);
//CHECK FOLDERS
var dropbox = "Lititz Summer Showcase Team Check In (File responses)";
var folder, folders = DriveApp.getFoldersByName(dropbox);
var teamBox = teamName;
var teamFolder, teamFolders = DriveApp.getFoldersByName(teamBox);
var passesFolder = DriveApp.getFolderById('ID');
var rosterFolder = DriveApp.getFolderById('ID');
var teamInfoFolder = DriveApp.getFolderById('ID');
var permissionToTravelFolder = DriveApp.getFolderById('ID');
if (folders.hasNext()) { //CHECK IF DRIVE HAS FOLDER FOR FORM
folder = folders.next();
} else { //IF NOT CREATE FOLDER
folder = DriveApp.createFolder(dropbox);
}
if (teamFolders.hasNext()) { //CHECK IF FOLDER FOR TEAM EXISTS
teamFolder = teamFolders.next();
} else { //IF NOT CREATE FOLDER
teamFolder = folder.createFolder(teamBox);
teamFolder.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.COMMENT);
}
for (var f = 0; f < itemResponses.length; f++) {
Logger.log(itemResponses[f].getItem().getType());
Logger.log(itemResponses[f].getItem().getTitle());
if (itemResponses[f].getItem().getType() == "FILE_UPLOAD") {
Logger.log("THERE IS A FILE UPLOAD");
//RENAME PASSES
if (itemResponses[f].getItem().getTitle() == "PASSES") {
var files = itemResponses[f].getResponse();
//Logger.log(files.length);
if (files.length > 0) {
for (var n in files) {
var dFile = DriveApp.getFileById(files[n]);
dFile.setName("LSS - " + year + " - " + teamName + " - " + "PASSES - " + today );
teamFolder.addFile(dFile); //MOVE SUBMITTED DOCUMENTS TO THAT FOLDER
passesFolder.removeFile(dFile); //REMOVE FROM SUBMISSION FOLDER
DriveApp.removeFile(dFile); // REMOVE FROM DRIVE FOLDER
}
}
//RENAME ROSTER
} else if (itemResponses[f].getItem().getTitle() == "ROSTER") {
var files = itemResponses[f].getResponse();
//Logger.log(files.length);
if (files.length > 0) {
for (var n in files) {
var dFile = DriveApp.getFileById(files[n]);
dFile.setName("LSS - " + year + " - " + teamName + " - " + "ROSTER - " + today );
teamFolder.addFile(dFile);
}
}
//RENAME TEAM INFO SHEET
} else if (itemResponses[f].getItem().getTitle() == "TEAM INFO SHEET") {
var files = itemResponses[f].getResponse();
//Logger.log(files.length);
if (files.length > 0) {
for (var n in files) {
var dFile = DriveApp.getFileById(files[n]);
dFile.setName("LSS - " + year + " - " + teamName + " - " + "TEAM INFO SHEET - " + today );
teamFolder.addFile(dFile);
}
}
//RENAME PERMISSION TO TRAVEL
} else if (itemResponses[f].getItem().getTitle() == "PERMISSION TO TRAVEL") {
var files = itemResponses[f].getResponse();
//Logger.log(files.length);
if (files.length > 0) {
for (var n in files) {
var dFile = DriveApp.getFileById(files[n]);
Logger.log(ownerEmail);
dFile.setName("LSS - " + year + " - " + teamName + " - " + "PERMISSION TO TRAVEL - " + today );
teamFolder.addFile(dFile);
}
}
}
}//END 'IF FILE UPLOAD'
}//END FOR LOOP
}//END FUNCTION
Конечно. Когда я открываю диск, я вижу исходный файл среди других несортированных файлов. Переименованный файл находится там, где я его ожидаю.
Спасибо за ответ. Вы хотите удалить файлы в корневой папке. Правильно ли я понимаю?
Позвольте мне попытаться объяснить процесс больше. У меня есть форма, которая собирает файл. Google автоматически создает папку и подпапки. Я успешно переименовал отправленные файлы, переместил их в новую папку и удалил из папки, созданной Google. Однако копия исходного неизмененного файла отправляется на Google Диск, в корневую папку. Этот исходный файл я хочу удалить.
Спасибо за ответ. О a copy of the original, unchanged file is going to Google Drive, the root folder., когда вы перемещаете загруженные файлы из папки, которая была создана автоматически, перемещенный файл создается в корневой папке как копия. Правильно ли я понимаю? Прошу прощения за мое плохое знание английского.
Без проблем! Я добавил в картинках выше. Это помогает?
Спасибо за ответ. Благодаря вашей поддержке, я думаю, что смог понять вашу ситуацию. 1. Загрузите файл из формы Google. 2. Загруженный файл создается в корневой папке, а созданный файл перемещается в папку, которая была создана автоматически. В это время файл в корневой папке остался. Вы хотите удалить оставшийся файл в корневой папке. Правильно ли я понимаю?
Я так думаю. Я открыт для любых предложений, отличных от того, что я пробовал выше!
Спасибо за ответ. Я предложил обходной путь. Не могли бы вы подтвердить это? Я не уверен, что это лучший метод. Так что, если это не тот результат, который вы хотите, я извиняюсь.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как насчет этого ответа?
Процесс загрузки из формы Google выглядит следующим образом.
В приведенном выше случае файл в корневой папке отличается от файла в папке, созданной Google Form. По этому DriveApp.getRootFolder().removeFile(dFile) в вашем "СНИППЕТЕ" не сработало. Это причина вашей проблемы со сценарием.
Как насчет этого обходного пути, чтобы удалить файл, созданный в корневой папке?
К сожалению, исходное имя файла невозможно получить из ответа формы. Но файл, который был скопирован в папку, созданную формой, имеет имя файла формата, например {original filename} - ####.{extension}. В этом обходном пути исходное имя файла извлекается из этого имени файла и перемещается в корзину, используя полученное исходное имя файла.
Этот пример скрипта запускается устанавливаемым триггером отправки формы. Поэтому, когда форма была отправлена, сценарий запускается, и загруженный файл перемещается в папку назначения, а исходный файл в корневой папке перемещается в корзину.
В этом примере скрипта предполагается, что скрипт является контейнерным скриптом Google Form. Пожалуйста, будьте осторожны с этим.
function formsubmit(e) {
var destFolderId = "###"; // Destination folder ID
if (e) {
Utilities.sleep(3000); // This is required.
var destfolder = DriveApp.getFolderById(destFolderId);
var items = e.response.getItemResponses();
for (var i = 0; i < items.length; i++) {
if (items[i].getItem().getType() == "FILE_UPLOAD") {
var files = items[i].getResponse();
for (var j = 0; j < files.length; j++) {
var file = DriveApp.getFileById(files[j]);
var filename = file.getName();
// Move uploaded file to the destination folder.
var uploadedFile = DriveApp.getFileById(files[j]);
var sourcefolder = uploadedFile.getParents().next();
destfolder.addFile(file);
sourcefolder.removeFile(file);
// Retrieve original filename.
var p1 = filename.split(" - ");
var extension = p1[p1.length - 1];
p1.pop();
var name = p1.join(" - ");
var p2 = "";
if (extension.indexOf(".") > -1) {
p2 = "." + extension.split(".")[1];
}
var orgFilename = name + p2;
// Move uploaded file to the trash.
var orgFiles = DriveApp.getRootFolder().getFilesByName(orgFilename);
if (orgFiles.hasNext()) {
var orgFile = orgFiles.next();
orgFile.setTrashed(true);
}
}
}
}
} else {
throw new Error("This sample script is run by the installable form submit trigger.");
}
}
Utilities.sleep(3000) требовалось. Когда файл загружается и копируется, запускается устанавливаемый триггер отправки формы. В это время, если Utilities.sleep(3000) не используется, файл перемещается до завершения копирования файла. При этом возникает ошибка. Так что я использовал его.
Я смог изменить его (мне не понадобился sleep), чтобы он соответствовал моему исходному коду. Фрагмент, который вы предоставили для поиска исходного имени файла, - это то, что мне нужно. Спасибо!
@ N.O.Davis Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена.
Могу я спросить вас о
the copy that's just listed in "Drive", not in any folder.?