【问题标题】:Microsoft Graph API - Read Office 365 SharePoint List and Pull Data (Images)Microsoft Graph API - 读取 Office 365 SharePoint 列表和提取数据(图像)
【发布时间】:2018-09-08 15:57:34
【问题描述】:

引用以下帖子:Microsoft Graph API - Office 365 Access SharePoint Nested Folder Items

我可以通过 Graph API 获取图像列表。我有一个 MVC Azure 应用程序,我正在其中进行这些 Graph API 调用。

但是,当我尝试通过 webUrl 属性访问图像时,我被拒绝访问。

我已经能够通过使用我可以访问的@microsoft.graph.downloadUrl 属性来解决这个问题,通过HttpClient 下载它转换为字节数组并转换为缩略图。

但理想情况下,我可以使用我的 MVC 站点对图形端点进行切片和切块,然后通过管道输出 webUrl,这样我就不必处理调整大小或存储图像字节数据。

首先,为什么webUrl 返回访问被拒绝?

其次,通过我的 MVC 应用传递图像 URL 的最佳方法是什么?我不想负责安置/改造形象。数据需要公开访问。

【问题讨论】:

    标签: office365 microsoft-graph-api onedrive sharepoint-online


    【解决方案1】:

    有几种方法可以做到这一点,但鉴于您希望显示缩略图,我会看看 /thumbnails 端点:

    GET /sites/{site-id}/drive/items/{item-id}/thumbnails
    

    您可以将它与/content 端点结合使用来检索二进制文件本身:

    GET /me/drive/items/{item-id}/thumbnails/{thumb-id}/{size}/content
    

    至于如何处理二进制结果,我通常在后端对其进行 Base64 编码,并将数据 URL 返回给客户端。您还可以缓存此结果,并让您的方法在向 Graph 发出新请求之前简单地检查有效的缓存副本。

    这对于数据非常少的个人资料照片和缩略图特别有效。

    使用 .NET Graph Client SDK 在 C# 中如何执行此操作的示例:

    var imageStream = await graphClient.Me
        .Photo
        .Content
        .Request()
        .GetAsync();
    
    using (var memoryStream = new MemoryStream())
    {
        imageStream.CopyTo(memoryStream);
        var base64pic = Convert.ToBase64String(memoryStream.ToArray());
        return "data:image;base64," + base64pic;
    }
    

    【讨论】:

    • 这是否意味着我需要为列表中的每个图像执行单独的图形请求?
    • 另外,关于为什么webUrl 被拒绝访问有什么想法吗?另外,我可以不只公开 Image 端点本身,这样我就不必做任何缓存吗?
    • 取得进展!所以事实证明缩略图端点是公共的,我可以从我的端点推送该 URL。
    • webUrl 用于在编辑器中打开文档(即在 Word Online 中打开 .docx)。它要求您在该过程中进行身份验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多