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

使用Graph Service Client上传大文件至SharePoint Online内容缺失问题排查

问题排查与修复方案

问题现象

上传20MB、30MB级PDF文件时,通过创建上传会话分片上传,将Base64字符串转成MemoryStream后设置分片大小为320KB,但上传后文件不完整(例如原文件35303569字节,仅上传35061760字节),过程无报错。

代码中的问题点

  • 变量名拼写错误:定义分片大小的变量名是maxschinksize,但创建LargeUploadTask时传入的是maxchunksize,导致实际使用的分片大小不是预期的320KB,进而遗漏最后一段数据。
  • Progress对象语法错误:创建IProgress<long>时缺少闭合括号,这会导致编译失败,需修正语法。
  • 未验证上传结果:上传完成后未检查uploadResult的状态,无法确认上传是否真的完成,也无法捕获潜在异常。

修复后的完整代码

using (var ms = new MemoryStream()) 
{ 
    byte[] bytes = System.Convert.FromBase64String(data); 
    ms.Write(bytes, 0, bytes.Length); 
    ms.Seek(0, SeekOrigin.Begin); 

    var uploadSession = await graphclient.Sites[SiteId].Drive.Root.ItemWithPath(docfilename).CreateUploadSession().Request().PostAsync();

    // 修正变量名拼写错误
    var maxchunksize = 320 * 1024;
    var largeuploadtask = new LargeUploadTask<DriveItem>(uploadSession, ms, maxchunksize);

    // 修正Progress对象语法错误,可添加进度日志方便排查
    IProgress<long> uploadProgress = new Progress<long>(uploadbytes =>
    {
        Console.WriteLine($"已上传 {uploadbytes} 字节");
    });

    var uploadResult = await largeuploadtask.UploadAsync(uploadProgress);

    // 验证上传结果状态
    if (uploadResult.UploadSucceeded)
    {
        Console.WriteLine("文件上传成功");
    }
    else
    {
        Console.WriteLine($"上传失败,错误信息:{uploadResult.Error.Message}");
    }
}

额外排查建议

  • 确认data对应的Base64字符串完整,无截断或损坏。
  • 在写入MemoryStream后,打印ms.Length确认与原文件字节数一致,排除Base64转换环节的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:05:24