导读:本期聚焦于小伙伴创作的《C#如何处理文件上传?ASP.NET Core常用文件上传方法有哪些》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何处理文件上传?ASP.NET Core常用文件上传方法有哪些》有用,将其分享出去将是对创作者最好的鼓励。

在ASP.NET Core应用开发中,使用C#处理文件上传是非常常见的需求,核心是通过IFormFile接口接收前端传递的文件数据,再完成后续的存储或者处理操作。

C#如何处理文件上传?ASP.NET Core常用文件上传方法有哪些

单文件上传基础实现

单文件上传是最基础的上传场景,前端通过表单提交文件,后端在控制器中通过IFormFile类型的参数接收文件。

前端表单示例

<form action="/Upload/Single" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <button type="submit">上传</button>
</form>

后端控制器实现

后端需要先注入IWebHostEnvironment获取项目路径,再判断文件是否为空,最后将文件保存到指定目录。

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

namespace UploadDemo.Controllers
{
    public class UploadController : Controller
    {
        private readonly IWebHostEnvironment _env;

        public UploadController(IWebHostEnvironment env)
        {
            _env = env;
        }

        [HttpPost]
        public async Task<IActionResult> Single(IFormFile file)
        {
            if (file == null || file.Length == 0)
            {
                return Content("未选择文件");
            }
            // 获取项目根目录下的uploads文件夹路径
            string uploadPath = Path.Combine(_env.WebRootPath, "uploads");
            // 如果文件夹不存在则创建
            if (!Directory.Exists(uploadPath))
            {
                Directory.CreateDirectory(uploadPath);
            }
            // 生成唯一文件名,避免重名覆盖
            string fileName = $"{Path.GetFileNameWithoutExtension(file.FileName)}_{Guid.NewGuid()}{Path.GetExtension(file.FileName)}";
            string filePath = Path.Combine(uploadPath, fileName);
            // 保存文件
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }
            return Content($"文件上传成功,保存路径:{filePath}");
        }
    }
}

多文件上传实现

多文件上传只需要将接收参数改为IFormFile集合即可,前端表单的input标签添加multiple属性允许选择多个文件。

前端表单示例

<form action="/Upload/Multiple" method="post" enctype="multipart/form-data">
    <input type="file" name="files" multiple />
    <button type="submit">批量上传</button>
</form>

后端控制器实现

[HttpPost]
public async Task<IActionResult> Multiple(List<IFormFile> files)
{
    if (files == null || files.Count == 0)
    {
        return Content("未选择文件");
    }
    string uploadPath = Path.Combine(_env.WebRootPath, "uploads");
    if (!Directory.Exists(uploadPath))
    {
        Directory.CreateDirectory(uploadPath);
    }
    foreach (var file in files)
    {
        if (file.Length > 0)
        {
            string fileName = $"{Path.GetFileNameWithoutExtension(file.FileName)}_{Guid.NewGuid()}{Path.GetExtension(file.FileName)}";
            string filePath = Path.Combine(uploadPath, fileName);
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }
        }
    }
    return Content($"共上传{successCount}个文件,全部上传成功");
}

限制上传文件的类型和大小

为了避免上传恶意文件或者过大的文件占用服务器资源,需要对上传文件做类型和大小限制。

大小限制配置

可以在Program.cs中全局配置上传文件大小限制,也可以在控制器方法上单独配置。

// Program.cs中全局配置,限制单个文件最大20MB,请求总大小最大60MB
builder.Services.Configure<FormOptions>(options =>
{
    options.MultipartBodyLengthLimit = 60 * 1024 * 1024; // 60MB
});
// 控制器方法上单独配置特性,限制该接口单个文件最大10MB
[HttpPost]
[RequestSizeLimit(10 * 1024 * 1024)] // 10MB
public async Task<IActionResult> Single(IFormFile file)
{
    // 原有逻辑
}

文件类型限制

可以通过判断文件的扩展名或者Content-Type来限制允许上传的文件类型,比如只允许上传图片文件。

[HttpPost]
public async Task<IActionResult> UploadImage(IFormFile file)
{
    // 允许的文件扩展名
    string[] allowedExtensions = { ".jpg", ".jpeg", ".png", ".gif" };
    string fileExtension = Path.GetExtension(file.FileName).ToLower();
    if (!allowedExtensions.Contains(fileExtension))
    {
        return Content("只允许上传jpg、jpeg、png、gif格式的图片文件");
    }
    // 也可以校验Content-Type
    string[] allowedContentTypes = { "image/jpeg", "image/png", "image/gif" };
    if (!allowedContentTypes.Contains(file.ContentType.ToLower()))
    {
        return Content("文件类型不合法");
    }
    // 后续保存逻辑
}

注意事项

  • 不要直接使用前端传递的文件名作为保存的文件名,避免路径遍历攻击,比如前端传递../../web.config这类文件名会修改服务器其他文件。
  • 上传的文件如果需要公开访问,要放在wwwroot目录下,并且注意设置合适的访问权限。
  • 大文件上传可以考虑分片上传的方式,避免单次请求时间过长导致超时。
  • 上传完成后可以对文件做病毒扫描,避免上传恶意文件到服务器。

C#ASP.NET_Core文件上传IFormFile修改时间:2026-06-15 02:57:31

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