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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:42:33