Подтвердить что ты не робот

Пример загрузки файла Google Forms

Как разрешить моим зрителям использовать Google Forms для загрузки некоторых файлов в мою форму и сохранения их на моем Google Диске?

Я ищу полный пример: он должен указать, какой код добавить к примеру Google Form HTML source. Как использовать Google Apps Script для загрузки файла просмотра в мою учетную запись Google Диска?

4b9b3361

Ответ 1

Обновление: Google Forms теперь может загружать файлы. Этот ответ был опубликован до того, как у Google Forms появилась возможность загружать файлы.

Это решение не использует Google Forms. Это пример использования приложения Script для веб-приложений, которое отличается от формы Google. Веб-приложение - это в основном веб-сайт, но вы не можете получить доменное имя для него. Это не является модификацией формы Google, которая не может быть выполнена для загрузки файла.

ПРИМЕЧАНИЕ. У меня был пример как службы пользовательского интерфейса, так и службы HTML, но удалил пример службы пользовательского интерфейса, поскольку служба пользовательского интерфейса устарела.

ПРИМЕЧАНИЕ. Единственная доступная настройка песочницы теперь IFRAME. Я хочу использовать атрибут onsubmit в теге начала формы: <form onsubmit="myFunctionName()">, это может привести к исчезновению формы с экрана после отправки формы.

Если вы используете режим NATIVE, ваше веб-приложение для загрузки файлов больше не работает. С режимом NATIVE, представление формы не будет вызывать поведение по умолчанию страницы, исчезающей с экрана. Если вы использовали режим NATIVE, и форма для загрузки файлов больше не работает, вы можете использовать кнопку "отправить". Я предполагаю, что вы также можете использовать API-интерфейс "google.script.run" для отправки данных на сервер. Если вы хотите, чтобы страница исчезла с экрана после отправки формы, вы можете сделать это по-другому. Но вам может быть все равно, или даже предпочитают, чтобы страница оставалась на экране. В зависимости от того, что вы хотите, вам нужно будет настроить параметры и код определенным образом.

Если вы используете кнопку типа "отправить" и хотите продолжать использовать ее, вы можете попробовать добавить event.preventDefault(); в свой код в функции обработчика событий отправки. Или вам нужно использовать API-интерфейс клиента google.script.run.


Пользовательская форма для загрузки файлов с компьютера пользователя на ваш Google Диск может быть создана с помощью приложения Script HTML Service. Этот пример требует написания программы, но я предоставляю здесь весь базовый код.

В этом примере показана форма загрузки с помощью службы Google Apps Script HTML.

Что вам нужно

  • Аккаунт Google
  • Дисковод Google
  • Google Apps Script - также называется Google Script

Google Apps Script

В редакторе кода Google Apps Script можно найти различные способы.

  • Загрузите приложения Script непосредственно с веб-адреса: https://script.google.com
  • Сначала откройте "Лист Google", затем откройте "Приложения" Script
  • Перейдите на свой Google Диск, затем откройте приложения Script: https://drive.google.com/drive/#my-drive
  • Перейдите на свой Google Диск, затем щелкните файл проекта Script
  • Откройте приложения Script из Документов Google
  • и т.д.

Я упоминаю об этом, потому что, если вы не знаете обо всех возможностях, это может быть немного запутанным. Google Apps Script может быть встроен в Google Site, Таблицы, Документы или Формы или использоваться как автономное приложение.

Приложения Script Обзор

Этот пример представляет собой приложение "Stand Alone" с поддержкой HTML.

Служба HTML - создание веб-приложения с использованием HTML, CSS и Javascript

Google Apps Script имеет только два типа файлов внутри Project:

  • Script
  • HTML

Script файлы имеют расширение .gs. Код .gs - это код на стороне сервера, написанный на JavaScript, и комбинация собственного API Google.

  • Скопируйте и вставьте следующий код
  • Сохранить
  • Создайте первую именованную версию
  • Опубликовать его
  • Установите разрешения

    и вы можете начать использовать его.

Начало:

  • Создайте новый пустой проект в приложениях Script
  • Скопировать и вставить в этот код:

Загрузите файл с помощью службы HTML:

Файл Code.gs (создан по умолчанию)

//For this to work, you need a folder in your Google drive named:
// 'For Web Hosting'
// or change the hard coded folder name to the name of the folder
// you want the file written to

function doGet(e) {
  return HtmlService.createTemplateFromFile('Form')
    .evaluate() // evaluate MUST come before setting the Sandbox mode
    .setTitle('Name To Appear in Browser Tab')
    .setSandboxMode();//Defaults to IFRAME which is now the only mode available
}

function processForm(theForm) {
  var fileBlob = theForm.picToLoad;

  Logger.log("fileBlob Name: " + fileBlob.getName())
  Logger.log("fileBlob type: " + fileBlob.getContentType())
  Logger.log('fileBlob: ' + fileBlob);

  var fldrSssn = DriveApp.getFolderById(Your Folder ID);
    fldrSssn.createFile(fileBlob);

  return true;
}

Создать html файл:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <h1 id="main-heading">Main Heading</h1>
    <br/>
    <div id="formDiv">

      <form id="myForm">

        <input name="picToLoad" type="file" /><br/>
        <input type="button" value="Submit" onclick="picUploadJs(this.parentNode)" />

      </form>
    </div>


  <div id="status" style="display: none">
  <!-- div will be filled with innerHTML after form submission. -->
  Uploading. Please wait...
</div>

</body>
<script>

function picUploadJs(frmData) {

  document.getElementById('status').style.display = 'inline';

  google.script.run
    .withSuccessHandler(updateOutput)
    .processForm(frmData)
};
  // Javascript function called by "submit" button handler,
  // to show results.

  function updateOutput() {

    var outputDiv = document.getElementById('status');
    outputDiv.innerHTML = "The File was UPLOADED!";
  }

</script>
</html>

Это полный рабочий пример. Он имеет только две кнопки и один элемент <div>, поэтому вы не увидите много на экране. Если .gs Script успешно, возвращается значение true и запускается функция onSuccess. Функция onSuccess (updateOutput) вводит внутренний HTML в элемент div с сообщением "Файл был ЗАГРУЖЕН!"

  • Сохраните файл, дайте проекту имя
  • Используя меню: File, Manage Version, затем сохраните первую версию
  • Publish, Deploy As Web App затем обновить

Когда вы запускаете Script в первый раз, он будет запрашивать разрешения, поскольку он сохраняет файлы на вашем диске. После того, как вы впервые разрешаете разрешения, приложения Script останавливаются и не будут работать. Итак, вам нужно запустить его снова. Script не будет запрашивать разрешения снова после первого раза.

Файл приложений Script появится на вашем Google Диске. В Google Диске вы можете установить разрешения для доступа и использования script. Script запускается простым предоставлением ссылки пользователю. Используйте ссылку так же, как вы загрузите веб-страницу.

Другой пример использования службы HTML можно увидеть по этой ссылке в StackOverflow:

Загрузка файлов с помощью службы HTML

ПРИМЕЧАНИЯ об устаревшем пользовательском интерфейсе:

Существует различие между UI-сервисом и Ui getUi() метода класса Spreadsheet (или другого класса). Служба пользовательских интерфейсов Apps Script была устарела 11 декабря 2014 года. Она будет продолжать работать для в течение некоторого периода времени, но вам рекомендуется использовать службу HTML.

Документация Google - Пользовательский интерфейс

Несмотря на то, что служба UI Service устарела, существует класс getUi() класса электронной таблицы для добавления настраиваемых меню, который НЕ > устарело:

Класс электронных таблиц - Получить метод пользовательского интерфейса

Я упоминаю об этом, потому что это может сбивать с толку, потому что они оба используют терминологию UI.

Метод UI возвращает возвращаемый тип Ui.

Вы можете добавить HTML в службу пользовательского интерфейса, но вы не можете использовать тег <button>, <input> или <script> в HTML с помощью службы пользовательского интерфейса.

Вот ссылка на общий файл приложения Script Web App Apps с формой ввода:

Общий файл - Контактная форма

Ответ 2

По состоянию на октябрь 2016 года Google добавила тип вопроса о загрузке файлов в родные формы Google, не требуется Google Apps Script. См. документацию.