Форма Google: Как сохранить загрузку нескольких файлов в определенной папке? - PullRequest
1 голос
/ 09 июля 2019

Я создал пользовательскую форму в форме Google, которая содержит вопрос о загрузке файла (разрешено несколько файлов). Я пытаюсь запустить скрипт при отправке формы, которая создает папку в определенное место на диске и сохраняет файлы, загруженные в этом. Но я понятия не имею, как получить идентификатор загруженных файлов и переместить их в новую папку. Спасибо

Мне удалось создать новую папку, но я не могу выбрать загруженный файл и сохранить его (или переместить) в целевую папку. Я не публикую код создания папки.

function onFormSubmit(e) {
  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var formResponse = formResponses[formResponses.length-1];
  var itemResponses = formResponse.getItemResponses();
  var itemResponse = itemResponses[1];
  var uploadedfile = itemResponse.getResponse();

  //now??
}

Я хотел бы получить идентификатор файла, но используя метод .getItem (). GetID (), я получил что-то вроде 1.148501776E9. Также как я могу перебрать загруженные файлы?

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Google сохраняет загруженные файлы следующим образом:

  1. Создает папку "Placeholder_for_Name_of_the_Form"(File responses) и подпапку: "Placeholder_for_Name_of_Question"(File responses) и сохраняет там все загруженные файлы.
  2. Если вы свяжете форму с электронной таблицей, электронная таблица будет содержать URL-адрес загруженного файла (который содержит идентификатор) в качестве ответа на вопрос. Вы также можете получить программный доступ к этим данным с помощью скрипта приложений (соответствующие методы: openSpreadsheetbyId(); getRage(); getValues(), ...).

enter image description here

Эта информация может быть полезна для вас, если вы хотите получить данные в другой момент времени, чем onFormSubmit().

0 голосов
/ 10 июля 2019
  • Когда файлы загружаются с помощью формы Google, вы хотите переместить загруженные файлы в определенную папку.
  • Вы уже установили триггер события OnSubmit для onFormSubmit().
  • У вас уже есть идентификатор папки назначения.

Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Очки модификации:

Модифицированный скрипт:

Перед использованием этого сценария, пожалуйста, установите ID папки назначения на var folderId = "###".

При изменении сценария, пожалуйста, удалите триггер события OnSubmit один раз и установите триггер снова. В это время, если отображается экран авторизации. Пожалуйста, авторизуйтесь. При этом скрипт работает. Пожалуйста, будьте осторожны с этим.

function onFormSubmit(e) {
  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var formResponse = formResponses[formResponses.length-1];
  var itemResponses = formResponse.getItemResponses();

  // I modified below script.
  Utilities.sleep(3000);

  var folderId = "###";  // Please set folder ID of the destination folder.

  var destfolder = DriveApp.getFolderById(folderId);
  for (var i = 0; i < itemResponses.length; i++) {
    if (itemResponses[i].getItem().getType() == "FILE_UPLOAD") {
      var ids = itemResponses[i].getResponse();
      for (var j = 0; j < ids.length; j++) {
        var file = DriveApp.getFileById(ids[j]);
        destfolder.addFile(file);
        file.getParents().next().removeFile(file);
      }
    }
  }
}

Примечание:

  • В моем тестовом случае, когда Utilities.sleep(3000) не используется, был случай, когда произошла ошибка, потому что файл пытался переместить до завершения загрузки файла. Так я и положил. Если в вашей среде нет ошибок без нее, пожалуйста, удалите ее.

Ссылки:

Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...