【发布时间】:2020-04-10 23:35:41
【问题描述】:
我正在尝试使用 MS Graph API 和 ReactJS 从 SharePoint 下载文件,然后替换该文件。使用@microsoft.graph.downloadUrl 值后,我已经管理了下载部分。这是从 SharePoint 获取 XML 文档的代码。
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 itemNotFounderror 返回。因为this user was able to get it to work 我认为我的 MS Graph API 是正确的,尽管我不确定我是否正确地转换为 ReactJS 语法。尽管错误消息显示未找到项目,但我认为 MS Graph 实际上可能对我将 XML 文件发回的方式感到不安。 Microsoft documentation for updating an existing file 状态应返回流中文件的内容。由于我已将 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 有一些错误,所以我不能完全确定。我确信我得到了驱动器项目的正确 ID,但我已经看到站点 ID 语法与 Graph API 不同的地方,所以它可能是项目 ID。
【问题讨论】:
标签: javascript reactjs sharepoint microsoft-graph-api