Скопировать файл в определенную родительскую папку с помощью Google Drive API?
Я использую Python 2.7 и служебную учетную запись, чтобы скопировать файл на Google Диске в другую папку в зависимости от его названия. Это требует от меня выполнения пяти (5!) Команд:
- Найти идентификатор файла по названию. (
files().list
) - Найти идентификатор родительской папки по названию (
files().list
) - Копировать файл (
files().copy
) - Передача права собственности на реальный счет (
files().insert
) - Переместить в родительскую папку. (
parents().insert
)
Это все работает, но я хотел бы уменьшить количество вызовов, и в первую очередь это означает кэширование идентификаторов, поэтому мне не нужно звонить files().list
, Следующее, что я пытаюсь сделать, и, в частности, где я нахожусь с этим вопросом, это как установить родительскую папку в files().copy
команда. В документации есть опционально parents
Параметр описан так:
Коллекция родительских папок, которые содержат этот файл. Установка этого поля поместит файл во все предоставленные папки. При вставке, если папки не указаны, файл будет помещен в корневую папку по умолчанию.
Хотя это и не говорит, я знаю, что это означает родительские идентификаторы, поскольку это то, что используется везде. Однако установка этого массива в клиентской библиотеке не дает эффекта: ошибки нет, и файл определенно не находится в нужной папке.
newfile = {'title': newtitle, 'parents' : [ parentFolderId ]}
service.files().copy(fileId=originalId, body=newfile).execute()
Кому-нибудь повезло с этим? Что-то еще мне не хватает?
Бонус: передать право собственности в команде копирования? Возможно, моя учетная запись службы может выдать себя за меня?
1 ответ
Ах, ха! parents
массив представляет собой список объектов с id
поле:
newfile = {'title': newtitle, 'parents' : [ { "id" : parentFolderId } ]}
service.files().copy(fileId=originalId, body=newfile).execute()
Я обновлю это, если / когда я выясню, как установить разрешения также.
Одно странное замечание: файл все еще копируется в корень диска, а также в родительские папки, которые я указал.