在框

时间:2015-10-24 03:06:23

标签: box-api box boxapiv2

我们的情况是我们有2个用户,UserA和UserB。我想将UserB的所有文件和文件夹传输到UserA。

我们正在使用协作API来执行此任务。但是得到以下错误

  

{"类型":"错误""状态":404,"代码":" NOT_FOUND" " CONTEXT_INFO" {"错误":[{"理由":" INVALID_PARAMETER""名称":& #34;角色","消息":"无效的值'所有者'。 '的作用'有价值的'所有者'找不到"}]}," help_url":" http://developers.box.com/docs/#errors"," message":& #34;未找到"," request_id":" 304354248562a743910984"}

当我通过"所有者"之外的任何东西时,我得到了有效的回复。作为请求中的角色。我不知道"所有者"作用。

这是请求

POST https://api.box.com/2.0/collaborations/ HTTP/1.1 
As-User: 254598270 
Authorization: Bearer UPSUE228kXGuDBGzy07G5fGxIrDL1QDj 
Content-Type: text/plain; charset=utf-8 
Host: api.box.com 
Content-Length: 108 
Expect: 100-continue 
Accept-Encoding: gzip, deflate
{"item":{"id":"5092905410","type":"folder"},"accessible_by":{"id":"254608030","type":"user"},"role":"owner"}

2 个答案:

答案 0 :(得分:3)

我认为文档可能有误。考虑到协作的工作原理,在协作中指定“所有者”角色并不合理。

但是,move user's folder端点可能正是您要寻找的。它允许您将一个用户的整个根文件夹移动到另一个用户的帐户。这是一个示例cURL请求:

curl https://api.box.com/2.0/users/USER_ID/folders/FOLDER_ID \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -d '{"owned_by": {"id": "USER_ID"}}' \
    -X PUT

请注意,目前仅支持根文件夹(文件夹ID为0)。幸运的是,它看起来像是你要移动的文件夹。

答案 1 :(得分:0)

所缺少的是,必须先将它们添加为编辑者,然后才能使其成为所有者。

如果您遵循https://developer.box.com/guides/folders/single/change-owner/

您将看到,转移所有权实际上不需要移动文件夹。这是一个非常简单的两(或三)步过程:

  1. 将新用户添加为角色EDITOR的协作者
  2. 立即将该协作更新为OWNER
  3. 的角色

就是这样。 (可选)您现在可以删除已从所有者降级为编辑者的原始所有者的协作。

这是我使用Python SDK的示例:

bc = box.BoxClient()  # This is my own client wrapper
owner = bc.get_user(old_owner.lastname)
user_client = bc.get_user_client(owner.id)  # Get a user_client for the owner
src_folder = user_client.folder(FOLDER_ID)

target = bc.get_user('new_owner.lastname')

new_collab = src_folder.collaborate(target, CollaborationRole.EDITOR)
updated_collaboration = new_collab.update_info(CollaborationRole.OWNER)

# Now we can remove the original owner as collaborator:
for collab in src_folder.get_collaborations():
    target = collab.accessible_by
    if target.id == owner.id:
        collab.delete()