将项目上载到个人 OneDrive 共享文件夹



OneDrive 用户 A 与 OneDrive 用户 B 共享一个文件夹,B 可以使用共享 ID 访问该文件夹。 例如,使用图形浏览器

GET https://graph.microsoft.com/v1.0/shares/{shareId}

收益 率

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#shares/$entity",
"id": "{shareId}",
"name": "ASharedFolder",
"owner": { ... }
}

现在,B 想要将一个新文件上传到 ASharedFolder。

阅读我尝试过的要上传的OneDrive文档

PUT https://graph.microsoft.com/v1.0/shares/{shareId}/driveItem/children:/SomeFile.txt:/content
Content-Type text/plain
some text goes here

以及

PUT https://graph.microsoft.com/v1.0/shares/{shareId}/items/{sharedItemId}:/SomeFile.txt:/content
Content-Type text/plain
some text goes here

但两者都会产生"错误请求"、"不支持的段类型...">

编辑:我现在已经在OneDrive Web UI中使用了OneDrive用户A和B的两种不同浏览器的场景,所以我知道这是可能的(无需先将共享文件夹添加到B自己的根目录(,但是我需要一些帮助来确定OneDrive REST API的正确请求。

有人知道吗?

我检查了将文件上传到属于其他用户的OneDrive上的共享文件夹的可能性。 我没有任何问题来使用GraphExplorer来实现它。

这是我所做的:

  1. 我得到了共享文件和文件夹的列表:

GET /me/drive/sharedWithMe

返回(部分数据已省略(:

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)",
"value": [
{
"@odata.type": "#microsoft.graph.driveItem",
"id": "<itemId>",
"name": "Folder name",
"parentReference": {
"driveId": "<myUserId>",
"driveType": "personal"
},
"remoteItem": {
"id": "<remoteItemId>",
"name": "Folder name",
"createdBy": 
"user": {
"displayName": "Other user name",
"id": "<otherUserId>"
}
},
"folder": {
"childCount": 0
},
"parentReference": {
"driveId": "<otherUserId>",
"driveType": "personal"
},
"shared": {
"owner": {
"user": {
"displayName": "Other user name",
"id": "<otherUserId>"
}
}
}
}
}
]
}
  1. 然后我使用以下数据预制了PUT请求:

PUT /drives/{otherUserId}/items/{remoteItemId}:/test.txt:/content

Content-Type: text/plain
The contents of the file goes here.

响应:Success - Status Code 201

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives('<otherUserId>')/items/$entity",
"id": "<itemId>",
"name": "test.txt",
"size": 35,
"createdBy": {
"application": {
"displayName": "Graph explorer"
},
"user": {
"displayName": "My user name",
"id": "<myUserId>"
}
},
"parentReference": {
"driveId": "<otherUserId>",
"driveType": "personal",
"id": "<parentReferenceId>",
"name": "Folder name",
"path": "/drives/<otherUserId>/items/<parentReferenceId>"
},
"file": {
"mimeType": "text/plain"
}
}

然后,在随后的GET /me/drive/sharedWithMe请求中,文件夹的childCount的值已增加到 1。

注意:

shares端点仅允许 GET 请求访问共享的 DriveItem 或共享项目的集合。它不允许创建新项目。

最新更新