导读:本期聚焦于小伙伴创作的《如何在ASP.NET Core MVC中实现文件上传、数据导入与导出功能》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在ASP.NET Core MVC中实现文件上传、数据导入与导出功能》有用,将其分享出去将是对创作者最好的鼓励。

在ASP.NET Core MVC项目开发中,文件上传、数据导入与导出是很多业务场景的必备功能,比如用户批量导入用户信息、导出报表数据等,掌握这三个功能的实现逻辑能大幅提升开发效率。

如何在ASP.NET Core MVC中实现文件上传、数据导入与导出功能

文件上传功能实现

首先需要在控制器中定义接收上传文件的接口,ASP.NET Core MVC通过IFormFile类型来接收前端传递的文件数据,同时需要做好文件类型、大小的校验,避免非法文件上传。

基础的上传接口实现代码如下:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Threading.Tasks;

namespace Demo.Controllers
{
    public class FileController : Controller
    {
        // 单文件上传接口
        [HttpPost]
        public async Task<IActionResult> UploadFile(IFormFile file)
        {
            // 校验文件是否为空
            if (file == null || file.Length == 0)
            {
                return BadRequest("请选择要上传的文件");
            }
            // 校验文件大小,限制为10MB以内
            if (file.Length > 10 * 1024 * 1024)
            {
                return BadRequest("文件大小不能超过10MB");
            }
            // 校验文件类型,只允许上传xlsx、csv格式
            var allowedExtensions = new[] { ".xlsx", ".csv" };
            var fileExtension = Path.GetExtension(file.FileName).ToLower();
            if (!allowedExtensions.Contains(fileExtension))
            {
                return BadRequest("仅支持上传xlsx、csv格式的文件");
            }
            // 定义文件保存路径,实际项目中可根据需求调整
            var savePath = Path.Combine(Directory.GetCurrentDirectory(), "UploadFiles");
            if (!Directory.Exists(savePath))
            {
                Directory.CreateDirectory(savePath);
            }
            var fileName = $"{Guid.NewGuid()}{fileExtension}";
            var filePath = Path.Combine(savePath, fileName);
            // 保存文件到服务器
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }
            return Ok(new { message = "文件上传成功", filePath = filePath });
        }
    }
}

数据导入功能实现

文件上传完成后,接下来需要解析上传的文件内容,将数据导入到数据库中。这里以导入Excel文件为例,需要引入EPPlus库来解析Excel数据,先通过NuGet安装EPPlus包。

Excel数据导入的实现代码如下:

using OfficeOpenXml;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

namespace Demo.Services
{
    public class ImportService
    {
        // 解析Excel并导入数据,假设Excel第一行为表头,对应User实体属性
        public async Task<List<User>> ImportUsersFromExcel(string filePath)
        {
            var userList = new List<User>();
            // 设置EPPlus非商业许可
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            using (var package = new ExcelPackage(new FileInfo(filePath)))
            {
                // 获取第一个工作表
                var worksheet = package.Workbook.Worksheets[0];
                // 获取行数,跳过第一行表头
                var rowCount = worksheet.Dimension.Rows;
                for (int row = 2; row <= rowCount; row++)
                {
                    var user = new User
                    {
                        // 假设第一列是用户名,第二列是邮箱,第三列是年龄
                        UserName = worksheet.Cells[row, 1].Text,
                        Email = worksheet.Cells[row, 2].Text,
                        Age = int.Parse(worksheet.Cells[row, 3].Text)
                    };
                    userList.Add(user);
                }
            }
            // 实际项目中这里可以将userList批量插入数据库
            return userList;
        }
    }

    // 用户实体类
    public class User
    {
        public string UserName { get; set; }
        public string Email { get; set; }
        public int Age { get; set; }
    }
}

数据导出功能实现

数据导出通常支持Excel、CSV等格式,下面分别介绍两种格式的导出实现方式。

导出为Excel格式

同样使用EPPlus库生成Excel文件,将数据库查询到的数据写入到Excel工作表中,然后返回文件流给前端。

using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml;
using System.Collections.Generic;
using System.IO;

namespace Demo.Controllers
{
    public class ExportController : Controller
    {
        // 导出用户数据为Excel
        [HttpGet]
        public IActionResult ExportUsersToExcel()
        {
            // 模拟从数据库查询到的用户数据
            var userList = new List<User>
            {
                new User { UserName = "张三", Email = "zhangsan@ipipp.com", Age = 25 },
                new User { UserName = "李四", Email = "lisi@ipipp.com", Age = 28 }
            };
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            using (var package = new ExcelPackage())
            {
                // 创建工作表
                var worksheet = package.Worksheets.Add("用户数据");
                // 设置表头
                worksheet.Cells[1, 1].Value = "用户名";
                worksheet.Cells[1, 2].Value = "邮箱";
                worksheet.Cells[1, 3].Value = "年龄";
                // 填充数据
                for (int i = 0; i < userList.Count; i++)
                {
                    worksheet.Cells[i + 2, 1].Value = userList[i].UserName;
                    worksheet.Cells[i + 2, 2].Value = userList[i].Email;
                    worksheet.Cells[i + 2, 3].Value = userList[i].Age;
                }
                // 自动调整列宽
                worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
                // 转换为字节数组
                var excelBytes = package.GetAsByteArray();
                // 返回文件,指定文件类型和文件名
                return File(excelBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "用户数据.xlsx");
            }
        }
    }
}

导出为CSV格式

CSV格式导出不需要依赖第三方库,直接拼接字符串生成文件内容即可,实现更简单,兼容性也更好。

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Text;

namespace Demo.Controllers
{
    public class ExportController : Controller
    {
        // 导出用户数据为CSV
        [HttpGet]
        public IActionResult ExportUsersToCsv()
        {
            var userList = new List<User>
            {
                new User { UserName = "张三", Email = "zhangsan@ipipp.com", Age = 25 },
                new User { UserName = "李四", Email = "lisi@ipipp.com", Age = 28 }
            };
            // 拼接CSV内容,第一行为表头
            var csvBuilder = new StringBuilder();
            csvBuilder.AppendLine("用户名,邮箱,年龄");
            foreach (var user in userList)
            {
                // 处理内容中的逗号,避免格式错误
                var userName = user.UserName.Contains(",") ? $"\"{user.UserName}\"" : user.UserName;
                var email = user.Email.Contains(",") ? $"\"{user.Email}\"" : user.Email;
                csvBuilder.AppendLine($"{userName},{email},{user.Age}");
            }
            var csvBytes = Encoding.UTF8.GetBytes(csvBuilder.ToString());
            // 返回文件,指定文件类型和文件名
            return File(csvBytes, "text/csv", "用户数据.csv");
        }
    }
}

注意事项

  • 文件上传时需要做好校验,避免恶意文件上传导致服务器安全问题
  • 大文件上传建议采用分片上传的方式,避免请求超时
  • 导入数据时需要做好数据合法性校验,比如邮箱格式、年龄范围等,避免脏数据进入数据库
  • 导出大量数据时建议采用流式导出,避免占用过多内存

ASP.NET_Core_MVC文件上传数据导入数据导出Excel操作修改时间:2026-06-04 14:50:52

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。