今天遇到一个问题,新建了一个.net Core 2.2项目,然后Controller里面加个了action,如下:
public IActionResult Excel2Mysql([FromForm]IFormFileCollection formData)
当用POSTMAN调试时候,formData的Count始终等于0,但是后来又建了一个基于net core 2.1的webapi,发现相同的调用,Count有值,后来弄了好久,发现2.2里面只能使用IFormCollection
只能这样调用:
public IActionResult Excel2Mysql([FromForm] IFormCollection formData)
里面使用IFormFileCollection files = formData.Files;获取文件
public IActionResult Excel2Mysql([FromForm] IFormCollection formData)
{
string sWebRootFolder = _hostingEnvironment.WebRootPath;
StringBuilder sb = new StringBuilder();
IFormFileCollection files = formData.Files;
try
{
foreach (var file in files)
{
if (file.Length > 0)
{
string sFileName = $"{Guid.NewGuid()}.xlsx";
FileInfo fileInfo = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
using (FileStream fs = new FileStream(fileInfo.ToString(), FileMode.Create))
{
file.CopyTo(fs);
fs.Flush();
}
using (ExcelPackage package = new ExcelPackage(fileInfo))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
int rowCount = worksheet.Dimension.Rows;
int ColCount = worksheet.Dimension.Columns;
bool bHeaderRow = true;
for (int row = 1; row <= rowCount; row++)
{
for (int col = 1; col <= ColCount; col++)
{
if (bHeaderRow)
{
if (worksheet.Cells[row, col].Value != null)
sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");
}
else
{
if (worksheet.Cells[row, col].Value != null)
sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");
}
}
sb.Append(Environment.NewLine);
}
}
}
}
return Content(sb.ToString());
}
catch (Exception ex)
{
return Content(ex.Message);
}
}