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

ASP.NET Core 5 WebAPI中MultiPartReaderStream流结束判定咨询

解决方案

方案1:直接通过Stream标准读取逻辑判断流结束(推荐)

所有继承自Stream的类都遵循统一的读取规范:调用ReadAsync/Read方法时,返回值为实际读取到的字节数,当返回值为0时,就代表流已经读取到末尾,不需要访问任何内部属性。
你拿到的section.Body已经是MultipartReader处理过的、仅对应当前文件的流,读取到返回0时就刚好读完整个文件内容,不会混入其他section或者boundary数据,完全满足你的上传需求。
示例代码如下,你可以直接替换你注释位置的逻辑:

// SharePoint推荐的分片大小,可根据实际网络调整,范围建议4MB~20MB
const int ChunkSize = 10 * 1024 * 1024;
var buffer = new byte[ChunkSize];
int bytesRead;
long totalUploaded = 0;
// 初始化SharePoint分片上传会话,此处替换为你自己的SharePoint上传会话初始化逻辑
var uploadSession = await CreateSharePointUploadSessionAsync(contentDisposition.FileName.Value);

while ((bytesRead = await section.Body.ReadAsync(buffer.AsMemory(0, ChunkSize))) > 0)
{
    // 直接将读取到的分片字节上传到SharePoint,不需要落盘
    await UploadChunkToSharePointAsync(uploadSession, buffer.AsMemory(0, bytesRead), totalUploaded);
    totalUploaded += bytesRead;
}

// 所有分片上传完成,提交SharePoint上传会话
await FinalizeSharePointUploadAsync(uploadSession);

return Ok(new { FileSize = totalUploaded });

方案2:提前获取文件总长度

如果你的SharePoint分片上传逻辑需要提前知道文件总大小,有两种可行方式:

  • 前端上传时在请求头中新增自定义字段(比如X-File-Total-Size),直接携带文件的真实大小,后端通过HttpContext.Request.Headers["X-File-Total-Size"]读取即可,该方式最可靠,性能无损耗
  • 若无法修改前端,可以先读取一遍section.Body统计总长度,再重置流重新读取上传,但大文件场景下会额外消耗一倍IO,不推荐使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:06:02