如何在.NET MAUI Blazor中读写文件并获取对应访问URL的本地存储路径
Windows平台.NET MAUI Blazor实现可写入音频目录与Web路径映射方案
1. 获取应用专属可写入本地路径
Windows平台下无需额外申请存储权限,直接使用MAUI封装的应用专属数据目录即可,该目录完全开放读写权限:
// 获取应用专属可写目录,拼接自定义的音频存储子目录 var audioStoragePath = Path.Combine(FileSystem.Current.AppDataDirectory, "custom_audios"); // 确保目录存在 if (!Directory.Exists(audioStoragePath)) { Directory.CreateDirectory(audioStoragePath); }
FileSystem.AppDataDirectory对应Windows系统下的路径为C:\Users\{用户名}\AppData\Local\Packages\{应用包标识}\LocalState,属于应用私有目录,读写无权限限制。
2. 配置本地目录到Web虚拟路径的映射
要让Blazor WebView能通过/xxx类的URL访问本地路径的文件,需要在MAUI启动配置中添加物理文件提供器映射:
首先在MauiProgram.cs中添加对应引用,然后修改服务注册逻辑:
using Microsoft.AspNetCore.Components.WebView; using Microsoft.Extensions.FileProviders; public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); }); builder.Services.AddMauiBlazorWebView(); // 配置Blazor WebView的静态资源映射 builder.Services.Configure<BlazorWebViewOptions>(options => { var audioDir = Path.Combine(FileSystem.Current.AppDataDirectory, "custom_audios"); Directory.CreateDirectory(audioDir); // 将本地音频目录映射到Web端的 /audios 虚拟路径 options.FileProviders.Add(new PhysicalFileProvider(audioDir), "/audios"); }); #if DEBUG builder.Services.AddBlazorWebViewDeveloperTools(); builder.Logging.AddDebug(); #endif return builder.Build(); } }
映射完成后,本地custom_audios目录下的所有文件,都可以通过/audios/文件名的路径在WebView中访问,匹配你需要的类https://0.0.0.0/..格式的访问链接。
3. 写入音频与前端调用示例
写入音频文件示例
// 假设你已经获取到音频的字节流/文件流 byte[] audioBytes = await GetYourAudioContentAsync(); var targetFilePath = Path.Combine(audioStoragePath, "demo.mp3"); await File.WriteAllBytesAsync(targetFilePath, audioBytes);
前端Audio标签调用
直接使用映射后的虚拟路径即可正常播放:
<audio controls src="/audios/demo.mp3"> 您的浏览器不支持音频播放 </audio>
注意事项
- 该目录为应用私有目录,应用卸载时会同步删除所有存储的音频文件
- 无需额外申请系统存储权限,不会触发权限申请弹窗
- 虚拟路径可根据需求自定义修改,只需保持映射配置和前端调用路径一致即可
内容的提问来源于stack exchange,提问作者Elie Tebchrani
相关产品推荐
相关产品推荐

