如何使用Google Drive API将文件传输到其他用户的云端硬盘?

时间:2015-05-20 19:26:15

标签: python google-app-engine google-api google-drive-api

我正在尝试转移当前属于我的Google文档,并将其移至另一个用户的Google云端硬盘的根目录。这两个帐户都位于同一个域中,我使用服务帐户访问所有用户。

首先,我尝试通过修改权限来做到这一点。这将使第二个用户访问该文件,但不会将其放入其驱动器的根目录或其他任何位置。如果用户想要查看它,则必须进行搜索。

然后我发现了一些使用文件服务的补丁方法提到的信息来更改文件的元数据,从而启动传输,但这没有用。

我唯一可以肯定的是属于我自己的根文件夹的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'])

我无法判断是否有任何错误,因为我没有收到任何错误消息。

非常感谢任何关于如何解决这个问题的想法。

2 个答案:

答案 0 :(得分:1)

好的,我明白了。看起来我只是使用了错误的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()

答案 1 :(得分:0)

是否会返回任何错误?

我认为你不能像这样“移动”这个文件。尝试file.insert到他的驱动器,然后从你自己的delete

我从来没有听说有人试图将文件的位置修改给其他人。 TBH我看不出它是如何工作的,因为您必须使用您的帐户和他的帐户进行身份验证服务,这是不可能的。即使你说你使用的服务帐户可以同时访问这两个帐户,但我认为API可以支持这一点。

您需要分两步执行此操作,插入 - >给他删除 - >来自你

更新:我刚刚从一位Google云端硬盘专家的同事那里听说他认为它已被破坏(修补位置)。他做了一个快速测试,并证实这是一个破碎的功能。它返回的全部是403 - insufficient permissions