Ответ 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 можно найти различные способы.
- Загрузите приложения 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, Таблицы, Документы или Формы или использоваться как автономное приложение.
Этот пример представляет собой приложение "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 с формой ввода: