使用Google Drive API将文件复制到特定的父文件夹中?

Nei*_*ski 5 python google-drive-api google-drive-realtime-api

我正在使用Python 2.7和服务帐户将Google云端硬盘中的文件根据其标题复制到另一个文件夹中.这需要我执行五(5!)个命令:

  1. 按标题查找文件ID.(files().list)
  2. 按标题(files().list)查找父文件夹ID
  3. 复制文件(files().copy)
  4. 将所有权转移到真实账户(files().insert)
  5. 进入父文件夹.(parents().insert)

这一切都有效,但我想减少通话次数,首先这意味着缓存ID,所以我不必打电话files().list.接下来的事情,我试图做的,具体我在哪里这个问题,是如何设置的父文件夹files().copy命令.该文档有一个可选parents参数,如下所示:

包含此文件的父文件夹的集合.设置此字段会将文件放在所有提供的文件夹中.在插入时,如果未提供文件夹,则该文件将放在默认的根文件夹中.

虽然它没有说,我知道这意味着父ID,因为这是其他地方使用的.但是,在客户端库中设置此数组不会产生任何效果:没有错误,文件肯定不在正确的文件夹中.

newfile = {'title': newtitle, 'parents' : [ parentFolderId ]}
service.files().copy(fileId=originalId, body=newfile).execute()
Run Code Online (Sandbox Code Playgroud)

有没有人有任何运气与此?还有什么我想念的吗?

奖励:在复制命令中转移所有权?也许我的服务帐户可能会冒充我?

Nei*_*ski 7

啊哈!该parents数组是一个包含该id字段的对象列表:

newfile = {'title': newtitle, 'parents' : [ { "id" : parentFolderId } ]}
service.files().copy(fileId=originalId, body=newfile).execute()
Run Code Online (Sandbox Code Playgroud)

如果/当我弄清楚如何设置权限时,我会更新这个.

这里有一个奇怪的注意事项是文件仍然被复制到驱动器根目录以及我指定的父文件夹.

  • 在 Google Drive V3 API 中,“parents”是一组作为纯字符串的文件夹 ID。“标题”参数也变成“名称”。这将教我复制并粘贴发布的代码。 (6认同)
  • {'姓名':新标题,'父母':[ target_folder_id ]} (2认同)