Blazor中使用CSVHelper导出CSV文件为空的问题排查
问题原因及解决方法
核心问题是MemoryStream的位置未重置到起始处:当你通过StreamWriter和CsvWriter往MemoryStream写入数据后,流的Position属性会指向最后一个字节的下一位。此时直接将这个流传给DotNetStreamReference,JavaScript读取时会从当前位置开始,自然读不到任何内容。
具体修改步骤
在await writer.FlushAsync();之后,添加一行代码重置流的位置:
await writer.FlushAsync(); mem.Position = 0; // 重置流到起始位置,确保JS能读取全部内容 streamRef = new DotNetStreamReference(stream: mem); await JSRuntime.InvokeVoidAsync("downloadFileFromStream", csvFileName, streamRef);
补充说明
你提到执行FlushAsync()后能读取到记录,是因为你当时可能手动处理过流位置,但在传给DotNetStreamReference时遗漏了这个关键操作,导致下载的流是空的。同时要确保所有写入操作(包括CsvWriter的WriteHeader和WriteRecordsAsync)完成后再执行位置重置和JS调用,避免数据未完全写入流。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

