Создайте новый файл в папке с приложениями 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);

Существуют также требуемые параметры запроса:

uploadTypemedia, 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