Загрузка элементов в личную общую папку OneDrive - PullRequest
0 голосов
/ 29 августа 2018

Пользователь A OneDrive совместно использует папку с пользователем B OneDrive, и B может получить доступ к этой папке с помощью идентификатора общего ресурса. Например, с помощью графографа

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

но оба выдают "BadRequest", "Неподдерживаемый тип сегмента ..."

Редактировать: теперь я разыграл этот сценарий в OneDrive Web UI , используя два разных браузера для пользователей OneDrive A и B, поэтому я знаю, что это возможно (без предварительного добавления общей папки в B собственный root), но мне нужна помощь в определении правильного запроса для API REST OneDrive.

Кто-нибудь знает?

1 Ответ

0 голосов
/ 30 августа 2018

Я проверил возможность загрузки файлов в общую папку на 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 или коллекции общих элементов. Не позволяет создавать новые предметы.

...