在新的OneDrive API上复制操作

时间:2015-03-25 12:21:13

标签: onedrive

我已经在这个问题上磕磕绊绊了一段时间。我试图将位于OneDrive文件夹的文件复制到同一帐户中的另一个文件夹中。 (即:从用户的根文件夹到其中一个子文件夹)。

根据OneDrive Copy API,我需要调用此REST API:

POST /drive/items/{item-id}/action.copy

其中{item-id}是我要复制的文件ID。对于此请求,我已使用此内容:

{
    "parentReference": {
        "id": [destination-folder-id]
    }
}

这个http调用工作得很好。我得到了理想的结果:

HTTP/1.1 202 Accepted
Location: https://onedrive.com/monitor/[generated-alphanumeric-characters]

当我在Location标题处关注链接时,我获得了异步作业状态:

{
    "operation": "ItemCopy",
    "percentageComplete": 0,
    "status": "notStarted",
    "statusDescription": "Completed 0/0 files; 0/0 bytes"
}

问题是,无论我等待多少次并拨打此链接,它都会给出准确的回复,status notStarted为{{1}}。我还尝试使用OneDrive's API Console重现这一点,并显示确切的行为。复制空文件夹时我没有任何问题。此问题仅发生在文件上。有谁知道为什么?我有什么办法可以开始那个异步工作吗?

1 个答案:

答案 0 :(得分:0)

似乎没有人知道这个问题。目前,我必须使用旧的OneDrive API(以前称为SkyDrive API)进行此复制操作,如下例所示:

COPY https://apis.live.net/v5.0/file.a6b2a7e8f2515e5e.A6B2A7E8F2515E5E!126

Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{
    "destination": "folder.a6b2a7e8f2515e5e.A6B2A7E8F2515E5E!114"
}

文件之后的东西。和文件夹。是用户ID,后跟项目ID(项目的file id或目的地的folder id)。请注意,这仅适用于文件。我们无法复制文件夹。如果成功,它将返回状态代码Created

哦,并且......为了使用此API,我们需要在验证我们的应用时在范围内wl.skydrive_update

我不会将此答案标记为已接受的答案,因为这只是此问题的解决方法。它并没有解决真正的问题。

每年4月12日更新: 好。根据{{​​3}},此API现在应该正常工作(引用的评论将于4月10日发布。所以我将此问题标记为已回答。