假设您有一个文件路径,例如:https://contoso.sharepoint.com/sites/somesite/MyDocLib/Folder/Foo.docx
将其转换为Microsoft Graph调用以获取文件内容的最简单方法是什么,我认为我们需要使用正确的ID通过drives
端点来完成此操作。
我假设我可能必须运行多个调用,并且可能假定/ slash1 / slash2是该站点,然后下一个是doclib etc(?)
答案 0 :(得分:2)
不确定这是最简单还是唯一的选择,但是以下解决方案演示了如何
符合Addressing resources in OneDrive API的要求:
Shares
API /shares/{shareIdOrEncodedSharingUrl}/driveitem/content
如何将URL转换为共享令牌
对于网址:
https://contoso.sharepoint.com/sites/somesite/MyDocLib/Folder/Foo.docx
应生成以下令牌:
u!aHR0cHM6Ly9jb250b3NvLnNoYXJlcG9pbnQuY29tL3NpdGVzL3NvbWVzaXRlL015RG9jTGliL0ZvbGRlci9Gb28uZG9jeA
MS Graph documentation(其中提供了C#版本)中介绍了如何编码URL。
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, '-');
}
示例
该示例演示了如何使用msgraph-sdk-javascript
library通过以https://contoso.sharepoint.com/sites/somesite/MyDocLib/Folder/Foo.docx
格式提供的url下载文件:
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);
});
});