You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Microsoft Graph下载SharePoint SiteAssets中的图片文件流?

SharePoint图片字段内容下载到流的解决方法

可行方案及实现步骤

方案1:通过列表项字段值获取图片路径并下载

图片字段的存储路径会包含在列表项的字段值中,你可以通过以下步骤获取并下载:

  • 调用Graph API获取目标列表项的图片字段值,图片字段返回的是包含serverRelativeUrl的JSON对象
  • 解析出serverRelativeUrl后,直接通过站点根驱动器的ItemWithPath方法获取图片内容流

方案2:构造图片存储路径直接请求

SharePoint的列表图片字段默认存储路径格式为:/sites/{站点名称}/SiteAssets/Lists/{列表内部名称}/{图片字段内部名称}/{文件名称},你可以根据这个规则构造路径,再通过Graph API请求内容流。

方案3:使用SharePoint REST API直接请求

如果Graph SDK调用有问题,也可以直接构造REST请求获取图片流:

  • 请求地址:/_api/web/getfilebyserverrelativeurl('{图片的serverRelativeUrl}')/$value
  • 用HttpClient发送GET请求,直接获取响应流

C#代码示例(Graph SDK实现)

using Microsoft.Graph;
using Newtonsoft.Json.Linq;

// 替换为你的站点ID、列表ID、项ID和图片字段内部名称
string siteId = "你的站点ID";
string listId = "你的列表ID";
string itemId = "你的列表项ID";
string imageFieldInternalName = "你的图片字段内部名称";

var graphClient = new GraphServiceClient(/* 已配置好的认证提供者 */);

// 1. 获取列表项的图片字段值
var listItemFields = await graphClient.Sites[siteId]
    .Lists[listId]
    .Items[itemId]
    .Fields
    .Request()
    .Select(imageFieldInternalName)
    .GetAsync();

// 2. 解析图片的服务器相对路径
var imageFieldValue = listItemFields.AdditionalData[imageFieldInternalName] as JObject;
string serverRelativeUrl = imageFieldValue["serverRelativeUrl"].ToString();

// 3. 下载图片流
using (var imageStream = await graphClient.Sites[siteId]
    .Drive
    .Root
    .ItemWithPath(serverRelativeUrl)
    .Content
    .Request()
    .GetAsync())
{
    // 此处可将stream用于应用内展示,例如转换为Bitmap或绑定到UI控件
}

注意事项

  • 确保应用已申请Sites.Read.All或Sites.ReadWrite.All权限,权限范围需覆盖目标站点
  • 图片字段的内部名称可能与显示名称不同,可通过列表设置的字段详情页查看
  • 如果SiteAssets驱动器在Graph中不可见,大概率是权限不足,需检查应用权限的配置范围

内容的提问来源于stack exchange,提问作者AlbertoCh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:42:09