代码之家  ›  专栏  ›  技术社区  ›  Mikael Svenson

从Microsoft图形中通过路径获取SharePoint文件最简单的方法是什么?

  •  1
  • Mikael Svenson  · 技术社区  · 7 年前

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

    将其转换为Microsoft图形调用以获取文件内容的最简单方法是什么?我认为我们需要通过 drives 使用正确ID的终结点。

    我假设我可能需要运行多个调用,可能假设/slash1/slash2是站点,然后下一个是doclib等(?)

    1 回复  |  直到 7 年前
        1
  •  2
  •   Vadim Gremyachev    7 年前

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

    • 第一步是 将URL转换为共享令牌(请参阅下面的部分) 对于这一点,我们利用 Shares API
    • 一旦 共享令牌 生成的OneDrive API请求下载文件的构造方式如下: /shares/{shareIdOrEncodedSharingUrl}/driveitem/content

    如何将URL转换为共享令牌

    对于URL:

    https://contoso.sharepoint.com/sites/somesite/MyDocLib/Folder/Foo.docx
    

    应生成以下令牌:

    u!aHR0cHM6Ly9jb250b3NvLnNoYXJlcG9pbnQuY29tL3NpdGVzL3NvbWVzaXRlL015RG9jTGliL0ZvbGRlci9Gb28uZG9jeA
    

    有关如何编码URL的说明,请参见 MS Graph documentation (此处提供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, '-');
    }
    

    例子

    该示例演示了如何通过中提供的URL下载文件。 https://contoso.sharepoint.com/sites/somesite/MyDocLib/Folder/Foo.docx 格式使用 msgraph-sdk-javascript library :

        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);
            });
        });