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

.NET MAUI Blazor Hybrid项目如何实现文件保存功能?

.NET MAUI Blazor Hybrid 文件保存到电脑的实现方案

.NET MAUI没有和FilePicker直接对应的原生文件保存API,但可以通过两种方式实现:第三方工具包或自定义平台原生逻辑。

方法一:使用CommunityToolkit.Maui的FileSaver(推荐)

这是最便捷的方式,已经封装了跨平台的文件保存逻辑:

  1. 安装NuGet包:Install-Package CommunityToolkit.Maui
  2. 在MauiProgram.cs中注册工具包:
builder.UseMauiApp<App>().UseMauiCommunityToolkit();
  1. 在Blazor组件中注入IFileSaver并调用保存方法:
@inject IFileSaver FileSaver

<button @onclick="SaveFile">保存文件</button>

@code {
    private async Task SaveFile()
    {
        // 替换成你要保存的实际数据
        var fileBytes = System.Text.Encoding.UTF8.GetBytes("这是要保存的文件内容");
        var fileName = "demo.txt";
        var mimeType = "text/plain";

        var saveResult = await FileSaver.SaveAsync(fileName, fileBytes, mimeType);
        if (saveResult.IsSuccessful)
        {
            // 保存成功后的逻辑,比如提示用户
        }
        else
        {
            // 处理保存失败的情况
        }
    }
}

方法二:自定义平台原生文件保存逻辑

如果不想依赖第三方包,可以针对不同平台单独实现:

Windows平台

使用Windows原生的SaveFileDialog:

private async Task SaveToWindows()
{
    var saveDialog = new Microsoft.Win32.SaveFileDialog
    {
        FileName = "demo.txt",
        Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"
    };

    if (saveDialog.ShowDialog() == true)
    {
        await System.IO.File.WriteAllTextAsync(saveDialog.FileName, "要保存的内容");
    }
}

macOS平台

使用macOS的NSSavePanel:

private async Task SaveToMacOS()
{
    var savePanel = new AppKit.NSSavePanel();
    savePanel.Title = "选择保存路径";
    savePanel.AllowedFileTypes = new string[] { "txt" };
    savePanel.NameFieldStringValue = "demo.txt";

    if (savePanel.RunModal() == (nint)AppKit.NSModalResponse.OK)
    {
        await System.IO.File.WriteAllTextAsync(savePanel.Url.Path, "要保存的内容");
    }
}

跨平台调用

在Blazor组件中根据当前平台选择对应方法:

<button @onclick="SaveFile">保存文件</button>

@code {
    private async Task SaveFile()
    {
        if (Microsoft.Maui.Devices.DeviceInfo.Platform == Microsoft.Maui.Devices.DevicePlatform.WinUI)
        {
            await SaveToWindows();
        }
        else if (Microsoft.Maui.Devices.DeviceInfo.Platform == Microsoft.Maui.Devices.DevicePlatform.MacCatalyst)
        {
            await SaveToMacOS();
        }
        // 可扩展Android、iOS等其他平台的保存逻辑
    }
}

内容的提问来源于stack exchange,提问作者DaveK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:35:36