有时候,我们需要从Excel或文本文件读取数据保存到数据库,以方便数据批量或大文本录入。一种方式是将文件上传到Server端进行读取,一种方式当然是直接在网页客户端读取后发送数据到Server端进行保存。考虑到Server端的安全性,后一种方式相对更安全,同时减轻Server端压力,也不用编写上传文件的复杂代码。
但是,Blazor 只提供上传文件的组件InputFile,它获取的是实现IBrowserFile接口的表示从 InputFile 组件中选择的文件的数据,需要注意的是它没有包含原始文件的路径。正因为没有路径,不可能以打开文件的方式去直接打开它然后读取,所以,需要再次将它写入到定义好的路径中,然后打开它。
以下是实现的代码:
private async void LoadFiles(IBrowserFile file)
{
var path = Path.Combine(Path.GetTempPath(), Path.GetTempFileName());//设置包含临时路径和临时文件名的参数
FileStream fs = new(path, FileMode.Create);
await file.OpenReadStream().CopyToAsync(fs);//将文件数据写入到临时路径
fs.Close();
using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
//读取文件数据
……
}
File.Delete(path);//读完后删除临时文件
}