将上传的.csv转换为内存流,然后转换为.Net Core中的c#数据表



我正在尝试制作一个应用程序,该应用程序将接受多种文件类型并将它们转换为c#DataTable。为此,我首先将文件复制到MemoryStream并记录文件的扩展名。然后基于扩展,我需要以不同的方式读取流。

我在上传.csv文件时遇到了困难。我首先将其复制到内存流中,但随后无法正确读取。请帮忙。

示例代码

public async Task<IActionResult> UploadFile(IFormFile file) {
Datatable dt = new DataTable();
var extension = Path.GetExtension(file.FileName);
if (file.length > 0) {
using (var ms = new MemoryStream()) {
await file.CopyToAsync(ms);
dt = ConvertFileToDataTable(ms, extension);
}
}
}
public DataTable ConvertFileToDataTable(MemoryStream stream, string ext) {
switch (ext.ToLower()) {
case ".xlsx":
// Already have this working
break;
case ".csv":
// This is where I need help
}
}

对于CSV,我假设第一行包含标题。如果我可以将MemoryStream转换回csv字符串,那么我就可以处理那里的逻辑,我只是不知道如何完成这一部分。

我之所以需要转换为MemoryStream,是因为我正在开发一个不能访问IFormFile的.Net标准库。它将接收流并返回一个数据表。基本上,它处理上面方法ConvertFileToDataTable中的代码。

您可以使用:将字节数组获取为字符串

Encoding.UTF8.GetString(stream.ToArray());

相关内容

  • 没有找到相关文章

最新更新