通过Microsoft Graph的路径来获取SharePoint文件的最简单方法是什么?

时间:2018-07-24 07:52:17

标签: sharepoint microsoft-graph

假设您有一个文件路径,例如:https://contoso.sharepoint.com/sites/somesite/MyDocLib/Folder/Foo.docx

将其转换为Microsoft Graph调用以获取文件内容的最简单方法是什么,我认为我们需要使用正确的ID通过drives端点来完成此操作。

我假设我可能必须运行多个调用,并且可能假定/ slash1 / slash2是该站点,然后下一个是doclib etc(?)

1 个答案:

答案 0 :(得分:2)

不确定这是最简单还是唯一的选择,但是以下解决方案演示了如何
符合Addressing resources in OneDrive API的要求:

  • 第一步是将URL转换为共享令牌(请参阅下文),为此,我们利用Shares API
  • 一旦生成了共享令牌,可以使用以下方式构造OneDrive 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);
        });
    });