我正在使用dotnet core制作一个webApi,从IFormFile中获取excel文件并读取其内容。https:/levelup.gitconnected.comreading-an-excel-file-using-an-asp-net-core-mvc-application-2693545577db。 这是做同样的事情,除了这里的文件是存在于服务器上,而我的文件将由用户提供。
这里是代码。
public IActionResult Test(IFormFile file)
{
List<UserModel> users = new List<UserModel>();
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
using (var stream = System.IO.File.Open(file.FileName, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
while (reader.Read()) //Each row of the file
{
users.Add(new UserModel
{
Name = reader.GetValue(0).ToString(),
Email = reader.GetValue(1).ToString(),
Phone = reader.GetValue(2).ToString()
});
}
}
}
return Ok(users);
}
}
当system.IO试图打开文件时, 它找不到路径,因为路径不存在. 有什么办法可以让它成为可能呢? 有什么其他方法可以让它成为可能。
PS:我不想先把文件上传到服务器上,然后再读取它。
你使用的是 file.FileName
属性,它指的是浏览器发送的文件名。这很好知道,但还不是服务器上真正的文件。你必须使用 CopyTo(Stream)
访问数据的方法。
public IActionResult Test(IFormFile file)
{
List<UserModel> users = new List<UserModel>();
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
using (var stream = new MemoryStream())
{
file.CopyTo(stream);
stream.Position = 0;
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
while (reader.Read()) //Each row of the file
{
users.Add(new UserModel{Name = reader.GetValue(0).ToString(), Email = reader.GetValue(1).ToString(), Phone = reader.GetValue(2).ToString()});
}
}
}
return Ok(users);
}