Blazor WA中将文件转换为byte[]的路径异常相关问题咨询
问题核心原因
Blazor WASM 运行在浏览器沙箱环境中,与 Blazor Server 的服务端运行机制完全不同:浏览器禁止前端代码直接访问客户端/服务端的本地磁盘文件系统,你在 Blazor Server 中使用的 System.IO 类读取本地路径的方案完全不适用于 WASM 场景,你遇到的两个报错均是该底层限制导致的。
针对你两个疑问的明确解答
- 关于「避免 File.ReadAllBytes 自动在路径前拼接/」:该行为是 WASM 运行时的内置逻辑,WASM 有独立的虚拟文件系统,根路径默认就是
/,你传入的 Windows 本地磁盘路径会被识别为虚拟文件系统的相对路径,自动拼接根路径。这个特性无法也不需要规避,因为你本来就不该用System.IO读取本地磁盘文件。 - 关于「正确获取项目文件夹路径」:Blazor WASM 运行在客户端浏览器中,既无法获取服务端的项目目录路径,也没有权限获取客户端的本地磁盘路径,没有任何方法可以实现你要的效果,请直接换用适配 WASM 的实现方案。
适配Blazor WASM的静态文件读取方案
如果你要读取的是你项目 wwwroot 目录下的静态文件,直接通过注入的 HttpClient 发起请求获取字节流即可,示例代码如下:
// 页面中先注入HttpClient @inject HttpClient Http // 读取wwwroot/files/file.rar的代码 byte[] fileBytes = await Http.GetByteArrayAsync("/files/file.rar");
拿到字节数组后,你可以通过 JS 互操作调用浏览器的下载能力完成文件下载的后续逻辑。
内容的提问来源于stack exchange,提问作者Yahia Ghita
相关产品推荐
相关产品推荐

