#sharepoint #sharepoint-rest-api
Вопрос:
Для некоторого контекста я использую sp-rest-прокси, чтобы создать инструмент, который будет получать, изменять и заменять данные json из SharePoint (MS 365) с помощью интерфейса react. После выяснения проблем с аутентификацией у меня теперь есть эта проблема, которая мешает мне обновлять файлы.
примечание: sp-rest-прокси поставляется с очень удобным интерфейсом, который позволяет вам тестировать различные маршруты на локальном хосте, фрагменты ниже являются относительными конечными точками SharePoint REST. Кроме того, хотя я использую примеры путей в целях конфиденциальности, в реальных путях нет специальных символов, это не проблема»%».
Эта конечная точка отлично работает, предоставляет мне данные без суеты
/sites/front/_api/web/GetFileByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder/data.json')/$value
но это приводит к 404-м годам
/sites/front/_api/web/GetFolderByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder')/files/add(url='data.json',overwrite=true)
/sites/front/_api/web/GetFolderByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder')/Files('data.json')
/*
{
"readyState": 4,
"responseText": "{"error":{"code":"-2147024893, System.IO.DirectoryNotFoundException","message":{"lang":"en-US","value":"File Not Found."}}}",
"responseJSON": {
"error": {
"code": "-2147024893, System.IO.DirectoryNotFoundException",
"message": {
"lang": "en-US",
"value": "File Not Found."
}
}
},
"status": 404,
"statusText": "Not Found"
}
*/
Я могу использовать интерфейс, чтобы увидеть, что моя папка существует и содержит элементы (мои файлы json).
/sites/front/_api/web/GetFolderByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder')
/*
"..." represents stuff I hid for privacy
{
"d": {
"__metadata": {
"id": "...",
"uri": "...",
"type": "SP.Folder"
},
"Files": {
"__deferred": {
"uri": "..."
}
},
"ListItemAllFields": {
"__deferred": {
"uri": "..."
}
},
"ParentFolder": {
"__deferred": {
"uri": "..."
}
},
"Properties": {
"__deferred": {
"uri": "..."
}
},
"StorageMetrics": {
"__deferred": {
"uri": "..."
}
},
"Folders": {
"__deferred": {
"uri": "..."
}
},
"Exists": true,
"IsWOPIEnabled": false,
"ItemCount": 5,
"Name": "otherFolder",
"ProgID": null,
"ServerRelativeUrl": "sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder",
"TimeCreated": "2021-09-20T18:51:29Z",
"TimeLastModified": "2021-10-01T20:03:03Z",
"UniqueId": "...,
"WelcomePage": ""
}
}
*/
Однако, когда я пытаюсь просмотреть файлы…
/sites/front/_api/web/GetFolderByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder')/Files
/*
{
"d": {
"results": []
}
}
*/
(«? $развернуть=файл» дает аналогичные результаты)
Учитывая, что мне, похоже, нужен GetFolderByServerRelativeUrl для замены файлов, мне действительно нужно выяснить, что там происходит.
добавление: Основываясь на некоторых аналогичных вопросах, я также упомяну об этом. Разрешения для моего приложения установлены следующим образом: (как предлагается здесь)
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
</AppPermissionRequests>
Ответ №1:
Путь должен быть относительным путем. URL-адрес должен быть следующим
/sites/front/_api/web/GetFolderByServerRelativeUrl('Library/folder/otherFolder')/files/add(url='data.json',overwrite=true)
API предназначен для загрузки или создания файла в пути. Вам следует подтвердить, что на сайтах sharepoint online есть папка и библиотека документов
Комментарии:
1. Спасибо за предложение, я обновил свой вопрос после уточнения правильной терминологии , использование
myLibrary/folder/subFolder
которой, похоже, приводит к ошибке 400 «Имя параметра: Указанное значение не поддерживается для параметра serverRelativeUrl». Я смог сократить маршрут до минимума, до/DeptSite/myLibrary/folder/subFolder
которого я не знал, что смогу это сделать. Однако это вызывает у меня ту же проблему. это соответствует ссылке, которую предлагает пользовательский интерфейс (см. Новый img 1).
Ответ №2:
Я получил ответ из формы Microsoft здесь (https://docs.microsoft.com/en-us/answers/questions/600556/sharepoint-rest-api-getfilebyserverrelativeurl-iss.html)
Хотя ответ, предоставленный @RaytheonXie-MSFT, был близок (и, вероятно, был бы на месте, если бы у меня был правильный путь, когда я впервые опубликовал, так что это на мне)
чего мне не хватало, так это до вызова GetFolderByServerRelativeUrl в URL-адресе. корректируя путь там, более относительный путь будет правильным.
что мне было нужно, так это:
/сайты /Домашняя страница/Сайт подразделений/Сайт отдела/ _api/web/GetFolderByServerRelativeUrl(‘Библиотека/папка/подпапка’)/Файлы
Я был так сосредоточен на команде GetFolderByServerRelativeUrl, что мой путь к пути к GetFolderByServerRelativeUrl был неправильным