我正在尝试传输当前属于我的谷歌文档,并将其移动到另一个用户的谷歌驱动器的根目录。两个帐户都在同一域中,我使用服务帐户访问所有用户。
一开始我尝试通过修改权限来做到这一点。这将允许第二个用户访问该文件,但它不会将其放入其驱动器的根目录或其他任何地方。如果用户想看到它,他们必须进行搜索。
然后我发现了一些信息,提到使用文件服务的补丁方法来更改文件的元数据,从而启动传输,但这不起作用。
我唯一确定的是属于我自己和我想要传输文件的用户的根文件夹的ID。这是我想做的,但失败了。
# Note: "service" is the connection to the domain service account
service.files().patch(fileId='FILE_ID_GOES_HERE',
body={'parents':[{'isRoot':True,'kind':'drive#parentReference','id':'user_two_root_folder_id'}]},
removeParents=['user_one_root_folder_id'],
addParents=['user_two_root_folder_id'])
我无法判断是否有任何错误,因为我没有得到任何错误消息。
好了,我明白了。看起来我只是使用了错误的API。您必须首先插入新的权限,然后删除旧的权限。这将把文件发送到新用户驱动器的根目录。
# Insert new permission first
new_permission = {
'value': 'email_of_new_owner@mydomain.com',
'type': 'user',
'role': 'owner'
}
run_new_permission = service.permissions().insert(fileId='FILE_ID_GOES_HERE',body=new_permission).execute()
# Then delete old permission
service.permissions().delete(fileId='FILE_ID_GOES_HERE', permissionId='PERMISSION_ID_GOES_HERE').execute()
是否返回任何类型的错误?
我认为你不能像那样"移动"文件。试文件。插入到他的驱动器中,然后从你自己的驱动器中删除。
我从来没有听说过有人试图把文件的位置打补丁给别人。TBH我看不出这是怎么回事,因为你必须用你的账户和他的账户同时认证服务,这是不可能的。尽管您说您使用的是一个服务帐户,可以访问两个帐户,但我非常希望API能够支持这一点。
你需要分两步完成,插入->到他,删除->从你
Update:我刚从一个同事那里听说他是Google Drive专家,他说他认为它坏了(补丁位置)。他做了一个快速测试,证实这是一个有问题的功能。它只返回403 - insufficient permissions