什么';通过Microsoft Graph中的路径获取SharePoint文件的最简单方法是什么?
假设您有如下文件路径:什么';通过Microsoft Graph中的路径获取SharePoint文件的最简单方法是什么?,sharepoint,microsoft-graph-api,Sharepoint,Microsoft Graph Api,假设您有如下文件路径:https://contoso.sharepoint.com/sites/somesite/MyDocLib/Folder/Foo.docx 将此转换为Microsoft Graph调用以获取文件内容的最简单方法是什么?我假设我们需要使用正确的id通过驱动器端点执行此操作 我假设我可能必须运行多个调用,并且可能假设/slash1/slash2是站点,然后是doclib等(?)不确定这是最简单的还是唯一的选项,但下面的解决方案演示了如何 满足以下要求: 第一步是将URL转换
https://contoso.sharepoint.com/sites/somesite/MyDocLib/Folder/Foo.docx
将此转换为Microsoft Graph调用以获取文件内容的最简单方法是什么?我假设我们需要使用正确的id通过驱动器
端点执行此操作
我假设我可能必须运行多个调用,并且可能假设/slash1/slash2是站点,然后是doclib等(?)不确定这是最简单的还是唯一的选项,但下面的解决方案演示了如何
满足以下要求:
- 第一步是将URL转换为一个共享令牌(请参阅下面的部分),我们将利用它
- 生成共享令牌后,下载文件的OneDrive API请求可以如下构造:
/shares/{sharedorecodesharingurl}/driveitem/content
https://contoso.sharepoint.com/sites/somesite/MyDocLib/Folder/Foo.docx
应生成以下令牌:
u!aHR0cHM6Ly9jb250b3NvLnNoYXJlcG9pbnQuY29tL3NpdGVzL3NvbWVzaXRlL015RG9jTGliL0ZvbGRlci9Gb28uZG9jeA
关于如何对URL进行编码,请参见(此处提供了C版本)
NodeJS版本:
function urlToToSharingToken(url) {
var trimEnd = function(str, c) {
c = c ? c : ' ';
var i = str.length - 1;
for (; i >= 0 && str.charAt(i) == c; i--);
return str.substring(0, i + 1);
};
var value = Buffer.from(url).toString('base64');
return "u!" + trimEnd(value, '=').replace(/\//g, '_').replace(/\+/g, '-');
}
示例
该示例演示了如何通过https://contoso.sharepoint.com/sites/somesite/MyDocLib/Folder/Foo.docx
使用以下格式:
这确实是一个非常好的解决方案——感谢您提供了创建共享编码部分的指针。比先获取驱动器,然后基于路径获取项目要好得多:)
const sharedItemId = urlToToSharingToken(url); //1.construct sharing token
const requestUrl = "/shares/" + sharedItemId + "/driveitem/content"; //2. construct a query to download a file content
return new Promise((resolve, reject) => {
var builder = client.api(requestUrl);
getAsBinary(builder, (err, stream) => {
if (err) {
return reject(err);
}
return resolve(stream);
});
});