2015-05-20 112 views
0

我试图将目前属于我的Google文档转移到其他用户的Google云端硬盘的根目录。这两个帐户都在同一个域中,我正在使用服务帐户来访问所有用户。如何使用Google Drive API将文件传输到其他用户的云端硬盘?

起初我试图通过修改权限来做到这一点。这会让第二个用户访问该文件,但不会将其放入其驱动器的根目录或任何其他位置。如果用户想看到它,他们将不得不进行搜索。

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

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

我不知道是否有什么问题,因为我没有收到任何错误消息。

任何想法如何去做到这一点将不胜感激。

回答

0

它是否返回任何类型的错误?

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

我从来没有听说过任何人试图将文件的位置修补给其他人。 TBH我看不出这是如何工作的,因为你不得不使用你的帐户和他的帐户进行服务验证,这是不可能的。尽管如您所说,您正在使用可同时访问这两个帐户的服务帐户,但我非常担心API可以支持此帐户。

你需要做这两个步骤,插入 - >他删除 - >从你

更新:我刚刚从一个同事谁是谷歌驱动的专家听到了,他说,他认为这被打破(补丁位置)。他做了一个快速测试,并验证这是一个破碎的功能。它返回的是403 - insufficient permissions

+0

我不认为这是行得通的。据我了解,file.insert应该在上传文件到Google Drive时使用。我没有上传任何东西。我只想将驱动器中的文件的所有权转让给其他人,并将其显示在其驱动器的根目录中。 – user2744119

+0

我怀疑你将不得不下载该文件,然后再次上传。 – DaImTo

1

好的,我想通了。它看起来像我只是使用错误的API。你必须先插入新的权限,然后你必须删除旧的权限。这会将文件发送到新用户的驱动器的根目录。

# Insert new permission first 
new_permission = { 
      'value': '[email protected]', 
      '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() 
相关问题