能否通过C#借助Graph API以Base64方式上传图片至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
相关产品推荐
相关产品推荐

