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

能否通过C#借助Graph API以Base64方式上传图片至SharePoint?

问题:C#通过Graph API上传图片到SharePoint失败,文件存在但无法显示

我已在Postman中成功实现将.png/.bmp格式图片上传至SharePoint,图片可正常显示。但使用Postman生成的C# RestSharp代码及衍生代码均未成功:SharePoint中能创建.png文件且返回成功,但图片无法正常显示。

在Postman调用界面右下角有“file contents here”提示,不清楚此处需传入图片的何种值,能否通过Base64值传递?我尝试过将参数设为image/png、application/json,添加Content-Type请求头,传入多种值但均无效果,以下是基础代码示例:

var ret = new Result();

var client = new RestClient(path);
var request = new RestRequest();
request.Method = verb;

request.AddParameter("text/plain", base64, ParameterType.RequestBody);

request.AddHeader("Authorization", $"Bearer {bearerToken}");

var requestResults = client.Execute(request);
ret.Data = requestResults.Content;
return ret;

我参考了微软官方文档关于DriveItem上传内容的说明,烦请告知该方案是否可行及我的问题所在,谢谢!


解决方案

问题根源

你当前的代码是将Base64字符串作为text/plain类型的请求体发送,而Graph API需要的是原始二进制文件内容,而非Base64编码后的文本。这就导致SharePoint存储的是Base64文本内容,而非图片的二进制数据,所以文件无法正常显示。

可行方案及修正代码

直接上传二进制内容是可行的,无需通过Base64传递。以下是修正后的RestSharp代码:

var ret = new Result();

// 读取本地图片文件的二进制内容
byte[] imageBytes = File.ReadAllBytes("path/to/your/image.png");

var client = new RestClient(path);
var request = new RestRequest();
request.Method = Method.Put; // 对应Graph API的PUT请求,用于上传文件内容

// 添加二进制请求体,指定正确的Content-Type
request.AddParameter("image/png", imageBytes, ParameterType.RequestBody);

request.AddHeader("Authorization", $"Bearer {bearerToken}");

var requestResults = client.Execute(request);
ret.Data = requestResults.Content;
return ret;

关键注意事项

  • Content-Type必须匹配文件类型:上传.png时用image/png,.bmp用image/bmp,确保请求头的Content-Type与实际文件格式一致。
  • 不要使用Base64转码:直接传递二进制字节数组,避免额外编码导致数据格式错误。
  • 请求方法正确:Graph API上传文件内容使用PUT请求,对应request.Method = Method.Put。

如果必须使用Base64(比如图片内容来自Base64字符串),需要先将Base64解码为二进制数组再传递:

// 假设base64是已获取的图片Base64字符串
byte[] imageBytes = Convert.FromBase64String(base64);
// 后续步骤同上面的二进制上传代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:40:58