Я пытаюсь использовать MS Graph API и ReactJS, чтобы загрузить файл из SharePoint, а затем заменить файл. Я управлял частью загрузки после использования значения @microsoft.graph.downloadUrl
. Вот код, который возвращает мне документ XML из SharePoint.
export async function getDriveFileList(accessToken,siteId,driveId,fileName) {
const client = getAuthenticatedClient(accessToken);
//https://graph.microsoft.com/v1.0/sites/{site-id}/drives/{drive-id}/root:/{item-path}
const files = await client
.api('/sites/' + siteId + '/drives/' + driveId + '/root:/' + fileName)
.select('id,name,webUrl,content.downloadUrl')
.orderby('name')
.get();
//console.log(files['@microsoft.graph.downloadUrl']);
return files;
}
При попытке загрузить этот же файл обратно я получаю сообщение об ошибке 404 itemNotFound
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. Несмотря на то, что в сообщении об ошибке говорится, что элемент не найден, я думаю, что MS Graph на самом деле может быть расстроен тем, как я отправляю файл XML обратно. Документация Microsoft по обновлению существующего файла гласит, что содержимое файла в потоке должно быть возвращено. Поскольку я загрузил файл XML в состояние, я не совсем уверен, как отправить его обратно. Самое близкое совпадение, которое я обнаружил, заключалось в преобразовании PDF-файла в BLOB-объект, поэтому я попробовал это.
export async function putDriveFile(accessToken,siteId,itemId,xmldoc) {
const client = getAuthenticatedClient(accessToken);
// /sites/{site-id}/drive/items/{item-id}/content
let url = '/sites/' + siteId + '/drive/items/' + itemId + '/content';
var convertedFile = null;
try{
convertedFile = new Blob(
[xmldoc],
{type: 'text/xml'});
}
catch(err) {
console.log(err);
}
const file = await client
.api(url)
.put(convertedFile);
console.log(file);
return file;
}
Я почти уверен, что это способ отправки файла обратно, но в Graph API есть некоторые ошибки, поэтому я не могу быть полностью уверен Я был убежден, что получаю правильный идентификатор элемента диска, но я видел, где синтаксис идентификатора сайта может отличаться от Graph API, так что, возможно, это идентификатор элемента.