blazor 上传文件

blazor 上传文件

ASP.NET Core Blazor 文件上传 | Microsoft Learn

前端

1
<InputFile OnChange="LoadIconFiles"/>

后端,为了方便,封装一个可以保存到不同目录,并回显保存到何处的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private async Task<string> __UploadTo(InputFileChangeEventArgs obj, string saveToFolderName)
{
if (obj?.File != null)
{
Log.Information("File uploading: {Name}", obj.File.Name);
var file = obj.File;
var fileName = file.Name;
var ext = Path.GetExtension(fileName);
var stem = Path.GetFileNameWithoutExtension(fileName);
var newFileName = stem + ext;
var filePath = Path.Combine("wwwroot", saveToFolderName, newFileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.OpenReadStream(1024 * 1024 * 30).CopyToAsync(stream);
}
Log.Information("File uploaded: {Name} - {Path}", fileName, filePath);
return $"使用此名称作为文件图片名: /{saveToFolderName}/{fileName}";
}
else
{
return "请选择图片上传";
}
}

private async Task LoadIconFiles(InputFileChangeEventArgs arg)
{
var msg = await __UploadTo(arg, saveToFolderName: "img");
_loadIconPrompt = msg;
StateHasChanged();
}

注意其中的 await file.OpenReadStream(1024 * 1024 * 30).CopyToAsync(stream);,里面指定的是文件大小,单位为字节。若此数量过低,则无法上传文件。

这样的方法会把上传的文件载入内存。如果上传大文件,看下文的微软官方文档

服务器端或客户端,没有文件读取或上传大小限制,尤其对于 InputFile 组件。 但是,将数据从 JavaScript 封送到 C# 时,客户端 Blazor 会将文件的字节读取到单个 JavaScript 数组缓冲区中,大小不超过 2 GB 或设备的可用内存。 使用 > 组件进行客户端上传时,大型文件上传 (InputFile 250 MB) 可能会失败。 有关详细信息,请参阅以下讨论:

对于尝试使用 InputFile 组件时失败的大型客户端文件上传,建议使用多个 HTTP 范围请求(而不是使用 InputFile 组件)通过自定义组件将大型文件分块。


blazor 上传文件
https://taylorandtony.github.io/2025/02/05/blazor-上传文件/
作者
TaylorAndTony
发布于
2025年2月5日
许可协议