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

Blazor中文件存盘后FileStream长度为0的问题求助

问题解决方法
  • 务必异步等待复制操作:CopyToAsync是异步方法,不使用await会导致代码跳过复制过程直接执行后续逻辑,此时流内容根本没写入磁盘。就算你之前加过await没解决,先确保所在方法标记为async,严格按异步流程执行。

  • 用using管理流资源:FileStream和源流都需要正确释放,using会自动调用Dispose,同时触发缓冲区数据写入磁盘,避免数据留在内存里没落地。

  • 按需重置流位置:如果后续要读取目标流,复制完成后要把Position设为0,不然从流的末尾开始读会得到0长度内容。

修正后的代码示例:

// 确保当前方法标记为async
FileUploads fup = new FileUploads();
using (Stream file = e.File.OpenReadStream(10240000))
{
    // 用Path.Combine避免路径拼接错误
    var path = Path.Combine(@"C:\BlazorUploads", e.File.Name);
    using (FileStream fs = File.Create(path))
    {
        await file.CopyToAsync(fs);
        // 强制刷新缓冲区,确保数据写入磁盘
        await fs.FlushAsync();
        
        // 如果后续需要用fup.FileStream读取内容,重置流位置到开头
        fs.Position = 0;
        fup.FileStream = fs;
    }
}
fup.FileName = e.File.Name;
fup.ContentType = e.File.ContentType;
fups.Add(fup);

补充提示:
如果后续要持续使用fup.FileStream,别把fs放在using里,否则Dispose后流会失效。这种情况要手动调用FlushAsync,并在不需要流的时候手动执行Dispose。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:04:55