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

时间:2014-01-28 19:54:26

标签: python google-drive-api google-drive-realtime-api

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

  1. 按标题查找文件ID。 (files().list
  2. 按标题(files().list
  3. 查找父文件夹ID
  4. 复制文件(files().copy
  5. 将所有权转让给真实帐户(files().insert
  6. 进入父文件夹。 (parents().insert
  7. 这一切都有效,但我想减少通话次数,首先是缓存ID,所以我不必拨打files().list。我正在尝试做的下一件事,特别是我遇到这个问题的地方,是如何在 files().copy命令中设置父文件夹。该文档有一个可选的parents参数,如下所示:

      

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

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

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

    有人有运气with this吗?还有其他我想念的东西吗?

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

1 个答案:

答案 0 :(得分:7)

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

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

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

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