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
相关产品推荐
相关产品推荐

