将上传的 .csv 转换为内存流,然后转换为 .Net Core 中的 c# 数据表
Convert uploaded .csv to memorystream and then to c# datatable in .Net Core
我正在尝试制作一个应用程序,它将接受多种文件类型并将它们转换为 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,我假设第一行包含 headers。如果我可以将 MemoryStream
转换回 csv 字符串,那么我可以从那里处理逻辑,我只是不知道该怎么做。
我需要转换为 MemoryStream
的原因是因为我正在处理无法访问 IFormFile 的 .Net 标准库。它将接收流和 return 数据 table。基本上,它处理上面方法ConvertFileToDataTable
中的代码。
您可以使用以下方法将字节数组作为字符串获取:
Encoding.UTF8.GetString(stream.ToArray());
我正在尝试制作一个应用程序,它将接受多种文件类型并将它们转换为 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,我假设第一行包含 headers。如果我可以将 MemoryStream
转换回 csv 字符串,那么我可以从那里处理逻辑,我只是不知道该怎么做。
我需要转换为 MemoryStream
的原因是因为我正在处理无法访问 IFormFile 的 .Net 标准库。它将接收流和 return 数据 table。基本上,它处理上面方法ConvertFileToDataTable
中的代码。
您可以使用以下方法将字节数组作为字符串获取:
Encoding.UTF8.GetString(stream.ToArray());