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

Blazor Wasm如何加载本地文件?读取本地文件报错求助

Blazor Wasm 读取本地文件大小的解决方案

你的代码抛出“Could not find file”异常的核心原因是浏览器安全沙箱限制:Blazor Wasm运行在浏览器环境中,网页代码被严格禁止直接通过本地文件路径(如file:///C:/Users/user01/Downloads/test.txt)访问用户设备上的文件——这是浏览器为保护用户隐私和安全的基础策略。FileInfo是.NET针对本地文件系统的API,在Wasm客户端环境中无法直接访问本地文件系统。

下面是两种可行的解决方案:

方案一:使用Blazor内置InputFile组件(官方推荐)

利用Blazor提供的InputFile组件让用户主动选择文件,即可安全读取文件大小:

<InputFile OnChange="HandleFileSelection" accept=".txt" />

@if (selectedFileSize.HasValue)
{
    <p>选中文件大小:@selectedFileSize 字节</p>
}

@code {
    private long? selectedFileSize;

    private void HandleFileSelection(InputFileChangeEventArgs args)
    {
        var selectedFile = args.File;
        selectedFileSize = selectedFile.Size;
    }
}

说明:

  • InputFile组件会唤起浏览器的文件选择对话框,用户主动选择文件后,代码才能获得文件的只读访问权限
  • InputFileChangeEventArgs包含选中的文件集合,通过File.Size可直接获取文件大小(单位:字节)
  • accept=".txt"用于限制仅可选择txt文件,可根据需求修改或移除该属性

方案二:自定义文件选择按钮(结合原生input)

如果需要自定义按钮样式,可使用原生<input type="file">配合Blazor的事件处理:

<button class="btn btn-primary" onclick="document.getElementById('hiddenFileInput').click()">选择文件</button>
<input id="hiddenFileInput" type="file" accept=".txt" style="display: none;" @onchange="OnFileChanged" />

<p>选中文件大小:@fileSize 字节</p>

@code {
    private long fileSize;

    private void OnFileChanged(ChangeEventArgs args)
    {
        var files = args.Value as IReadOnlyList<Microsoft.AspNetCore.Components.Forms.IBrowserFile>;
        if (files?.Any() == true)
        {
            fileSize = files.First().Size;
        }
    }
}

关键注意事项:

  • 所有读取本地文件的操作必须由用户主动触发(如点击按钮后选择文件),代码无法直接通过路径访问本地文件
  • 浏览器仅允许网页读取用户主动选择的文件,且只能获取文件的元数据(大小、名称等)和只读内容流,无法修改或访问其他本地文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:25:24