Создайте новый файл в папке с приложениями Script с помощью службы Google Advanced Drive
Существует четыре способа создания нового файла:
- DocsList - отображается в DocsList в главном списке. Встроен в приложения Script.
- DriveApp - отображается как Дисковод в главном списке. Встроен в приложения Script.
- Драйвер API - также показан как Привод в главном списке. Должен быть добавлен в приложения Script.
- DocumentApp - отображается как Документ в главном списке. Встроен, но только создает файл документа.
Все они называются услугами. Драйвер API называется расширенной службой. Итак, какой из них вы должны использовать? Я не знаю, это зависит. Этот вопрос касается расширенной службы Drive API.
Я не хочу использовать 2 или 3 службы для выполнения этой работы. Я бы хотел использовать один из них. Но чтобы решить, какой из них использовать, мне нужно знать возможности и варианты всех из них. Если самый простой и простой в использовании будет делать все, что я хочу, то я буду использовать его.
Если я могу создать новый файл с API-интерфейсом диска, но тогда мне нужно использовать службу DriveApp для перемещения файла, который я создал с помощью API-интерфейса Drive, в папку, в которой я хочу, а затем использовать Drive API в этой конкретной ситуации. бессмысленно.
Я могу создать новый файл на своем Google Диске из кода Google Apps Script .gs
, но файл будет записан на главный "Мой диск". Я хочу записать файл непосредственно в подпапку. Мой текущий код:
var fileNameSetA = 'someFile.jpg';
var uploadedBlobA = an image uploaded with a file picker;
var fileTestDrive = {
title: fileNameSetA,
mimeType: 'image/jpeg'
};
fileTestDrive = Drive.Files.insert(fileTestDrive, uploadedBlobA);
Несмотря на то, что код работает, я понятия не имею, почему синтаксис такой, какой он есть, и я не могу найти документацию, которая подсказывает мне, почему. Я могу найти список свойств:
title:
и mimeType:
являются необязательными свойствами как часть Request Body
. В примере необязательные свойства, очевидно, помещаются в парный объект с ключом: value. Итак, синтаксис:
Drive.Files.insert(optional properties, content);
Существуют также требуемые параметры запроса:
uploadType
→ media
, multipart
, resumable
Но я не вижу требуемого параметра uploadType
, обозначенного в любом месте кода примера. Итак, я не понимаю документацию Google.
Вставка документации Google
Можно ли напрямую писать на конкретный диск с помощью службы Google Advanced Drive в файле кода приложения Script.gs? Как это сделать?
Ответы
Ответ 1
Документация для INSERT для Дискового API находится по этой ссылке:
Драйвер API для INSERT
Существует раздел для тела запроса. Один из Необязательных свойств для Вставить - родители []. Скобки [] указывают, что список родителей может быть назначен. В документации для родителей [] указано следующее:
Коллекция родительских папок, содержащих этот файл. Установка этого поле будет помещать файл во все предоставленные папки. При вставке, если никакие папки не предоставляются, файл будет помещен в корень по умолчанию папку.
Итак,., используя Вставить в Драйвер API.,, МОЖЕТ записать новый файл непосредственно в подпапку. Это возможно.
Теперь номенклатура и синтаксис для Google SDK, HTTP-запроса отличается от того, что находится внутри приложений Script.
Синтаксис для вызова HTTP-запроса Drive API внутри файла .gs
является одним из следующих трех:
- Drive.Files.insert(ресурс FILE)
- Drive.Files.insert(ресурс FILE, BLOB mediaData)
- Drive.Files.insert(ресурс FILE, BLOB mediaData, OBJECT optionalArgs)
Синтаксис, показанный в списке выше, приведен в раскрывающемся списке автозаполнения в редакторе кода приложения Script. Если вы наберете Drive.Files.
, появится список возможных методов. Я не могу найти информацию о синтаксисе в онлайн-документации.
Итак, где находится свойство parent [] необязательное свойство? Ну, это не Blob, поэтому мы можем это исключить. Это либо FILE resource
, либо OBJECT optionalArgs
. optionalArgs указывает, что это объект, но FILE resource
на самом деле также является объектом.
В примерах FILE resource
создается как объект пары ключ: значение.
Загрузка файлов - Advanced Drive Service - Документация Google
Ответ 2
Возможно, это немного поздно, но, посмотрев документы API REST, вы увидите, что вы можете использовать Drive.Files.insert для вставки в любую папку. Вам просто нужно добавить идентификатор папки в свойствах файла, который вы вставляете как таковой:
var file = {
title: 'myFile',
"parents": [{'id':folder.getId()}], //<--By setting this parent ID to the folder ID, it creates this file in the correct folder.
mimeType: 'image/png'
};
Идентификатор папки можно получить по общедоступной ссылке с помощью графического интерфейса Google Drive или, как показано здесь. (Например, используйте функцию "Выполнить" справа.)
Кроме того, вы можете получить доступ к папке по имени, заменив folder.getID() на Drive.getFoldersByName("имя папки").
Это полезно, потому что Drive.Files.insert() принимает аргументы, а Drive.createFile() и Drive.createFolder() - нет.
Ответ 3
Самый простой способ создать новый файл - использовать DriveApp
, который поставляется с чистыми Google Apps Script:
var dir = DriveApp.getFolderById("{dir_id}");
var file = dir.createFile(name, content);
Если вы не знаете точный идентификатор каталога, вы можете получить папку по ее имени:
var dir = DriveApp.getFoldersByName(name).next();
next()
существует, потому что getFoldersByName()
возвращает коллекцию всех каталогов, имена которых соответствуют заданному значению.
Также проверьте DriveApp
docs: https://developers.google.com/apps-script/reference/drive/drive-app
Ответ 4
Я смог использовать DriveApp для создания файла в указанной папке таким образом.
var driveFolder = DriveApp.getFolderByName("MyDriveFolder");
var file = driveFolder.createFile(formObject.txtReceipt);
file.setName("MyFile");
PS: formObject.txtReceipt исходит из элемента управления загрузкой файла в форме в html, и это возвращает blob