Google Drive SDK:如何复制文件以使副本仅存在于根文件夹中?

时间:2014-09-26 02:07:27

标签: python google-drive-api

我正在尝试找出一种有效的方法来复制Google云端硬盘文件,以便副本仅存在于用户的根文件夹中。

我知道当您创建新的Google云端硬盘文件时,默认情况下它位于根文件夹中:

>>> body = {"title": "Test Document", "mimeType": "application/vnd.google-apps.document"}
>>> document = drive_service.files().insert(body=body).execute()
>>> document["parents"]
[{u'id': u'...', u'isRoot': True, 'kind': u'drive#parentReference', ...}]

但是,当您复制Google云端硬盘文件时,默认情况下它与源文件位于同一文件夹中。

一种可能性是首先查询用户根文件夹的ID并将其传递给复制请求:

>>> about = drive_service.about().get().execute()
>>> root_id = about["rootFolderId"]
>>> body = {"title": "My copy", "parents": [{"id": root_id}]}
>>> copied_document = drive_service.files().copy(fileId="SOMEID", body=body).execute()

但是,上述操作需要额外的查询并增加完成操作的总时间。

我正在寻找一种方法,在不事先知道根文件夹ID的情况下执行此操作。我已经尝试将空列表传递给“父母”,但这仍然会导致副本放在同一个文件夹中:

>>> body = {"title": "My copy", "parents": []}
>>> copied_document = drive_service.files().copy(fileId="SOMEID", body=body).execute()

我也试过传入根文件夹的“存根”,但是引发了错误:

>>> body = {"title": "My copy", "parents": [{"isRoot": True, "kind": "drive#parentReference"}]}
>>> copied_document = drive_service.files().copy(fileId="SOMEID", body=body).execute()
Traceback (most recent call last)
...
HttpError: <HttpError 404 when requesting https://www.googleapis.com/drive/v2/files/SOMEID/copy?alt=json returned "File not found:">

我还缺少另一种方法吗?

(以上示例使用Google API Python客户端)

1 个答案:

答案 0 :(得分:3)

我似乎记得root的文件夹ID别名为&#34; root &#34;。尝试在第二种方法中将其作为根id传递。