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

Blazor Server中InputFile仅返回文件名无路径的文件上传问题

Blazor Server文件上传:解决FileNotFoundException问题

浏览器出于安全限制,不会将客户端文件的完整本地路径传递给服务器,所以你通过e.File.Name只能拿到文件名和扩展名,无法直接用这个名称去服务器本地目录查找文件——因为文件此时还在用户的客户端设备上,不在服务器的项目文件夹里,这就是抛出FileNotFoundException的根本原因。

你需要通过InputFile提供的文件流来读取或保存文件,而不是依赖本地路径。以下是修正后的代码示例:

// 改为异步Task方法,适配文件IO的异步操作特性
private async Task ImportFile(InputFileChangeEventArgs e)
{
    var uploadedFile = e.File;

    // 示例1:读取文件内容到内存(可用于解析、存入数据库等场景)
    using var fileStream = uploadedFile.OpenReadStream();
    using var memoryStream = new MemoryStream();
    await fileStream.CopyToAsync(memoryStream);
    byte[] fileContent = memoryStream.ToArray();
    // 此处可根据业务需求处理fileContent,比如转字符串、解析Excel等

    // 示例2:将文件保存到服务器本地目录
    // 指定服务器上的存储目录(建议创建专门的Uploads文件夹,避免污染项目根目录)
    string saveDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Uploads");
    // 确保目标目录存在,避免创建文件时抛出目录不存在的错误
    Directory.CreateDirectory(saveDirectory);
    string savePath = Path.Combine(saveDirectory, uploadedFile.Name);

    // 写入文件到服务器
    await using var outputStream = new FileStream(savePath, FileMode.Create);
    // 重新打开流(因为前面的fileStream已读取到末尾)
    await uploadedFile.OpenReadStream().CopyToAsync(outputStream);
}

补充注意事项:

  • 必须使用异步方法(async Task),文件IO操作属于异步操作,同步调用可能导致线程阻塞
  • 保存文件到服务器时,要确保应用程序对目标目录有写入权限
  • 不要尝试解析或使用客户端文件路径,这是浏览器安全机制不允许的,也没有实际意义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:22:09