Blazor WASM中MPXJ开发:.NET流转Java流后为空求助
解决Blazor中MPXJ读取文件时Java流为空的问题
问题根源
你把文件流复制到MemoryStream后,MemoryStream的Position指针停在了流的末尾。此时用InputStreamWrapper包装这个流,Java流会从当前位置(末尾)开始读取,自然读不到任何数据。
修复代码
只需要在包装流之前,重置MemoryStream的位置到起始处即可:
private async System.Threading.Tasks.Task ReadFile() { var stream = new MemoryStream(); await file.OpenReadStream(MAXSIZE).CopyToAsync(stream); // 关键步骤:将流的位置重置到起始点 stream.Position = 0; java.io.InputStream javaStream = new ikvm.io.InputStreamWrapper(stream); net.sf.mpxj.reader.UniversalProjectReader reader = new net.sf.mpxj.reader.UniversalProjectReader(); ProjectFile projectFile = reader.read(javaStream); }
额外优化建议
- 调整
MAXSIZE值,确保不会截断大文件;如果业务允许,也可以去掉大小限制(需注意内存占用风险)。 - 使用
using语句自动释放流资源,避免内存泄漏:using var stream = new MemoryStream(); await file.OpenReadStream(MAXSIZE).CopyToAsync(stream); stream.Position = 0; // 后续读取操作 - 添加异常捕获逻辑,处理文件格式错误、读取失败等场景,提升代码健壮性。
内容的提问来源于stack exchange,提问作者user2019508
相关产品推荐
相关产品推荐

