您的位置:首页 > 手游攻略 > ASP.NET Core中实现方式高效的文件上传的示例代码实用指南

ASP.NET Core中实现方式高效的文件上传的示例代码实用指南

作者:互联网  时间: 2026-09-07 14:00:01  

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“ASP.NET Core中实现方法高效的文件上传的示例代码”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

从实现思路看,在现代的 Web 应用里,文件上传功能常常是必不可少的。在 ASP.NET Core 中,处理文件上传相对轻松,且能够灵活地设置与定制。下面会介绍如何在 ASP.NET Core 中实现文件上传功能,包括基本的文件上传、限制文件大小、文件类型验证等。

1. 新建 ASP.NET Core 项目

在这个场景下,首先,确保你已经安装了 .NET SDK。如果没有,访问 官方文档 下载安装。

结合项目来看,下面,能够采用以下命令来新建一个新的 ASP.NET Core Web API 项目:

dotnet new webapi -n FileUploadExample
cd FileUploadExample

实际处理时,此命令会新建一个基于 Web API 的项目,我们能够在此项目中实现文件上传功能。

2. 设置文件上传

2.1 设置 Startup.cs

在这个场景下,在 ASP.NET Core 3.0 及以上版本,项目的设置都在 Program.cs 文件中,而不是传统的 Startup.cs 文件。

首先,打开 Program.cs 文件,同时确保添加了以下设置:

var builder = WebApplication.CreateBuilder(args);

// 配置文件上传大小限制
builder.Services.Configure<FormOptions>(options =>
{
    options.MultipartBodyLengthLimit = 10 * 1024 * 1024; // 设置文件上传大小限制为 10MB
});

var app = builder.Build();

// 配置 HTTP 请求管道
app.UseHttpsRedirection();
app.MapControllers();
app.Run();

2.2 新建文件上传控制器

随后,在 Controllers 目录下新建一个新的控制器 FileUploadController.cs。这个控制器将处理文件上传的业务逻辑。

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

namespace FileUploadExample.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class FileUploadController : ControllerBase
    {
        // 上传文件的 API
        [HttpPost("upload")]
        public async Task<IActionResult> UploadFile(IFormFile file)
        {
            if (file == null || file.Length == 0)
            {
                return BadRequest("未选择文件");
            }

            // 限制文件类型(例如只允许上传 .jpg 和 .png 文件)
            var allowedExtensions = new[] { ".jpg", ".jpeg", ".png" };
            var extension = Path.GetExtension(file.FileName).ToLowerInvariant();
            if (!allowedExtensions.Contains(extension))
            {
                return BadRequest("只允许上传 JPG 和 PNG 格式的文件");
            }

            // 限制文件大小(例如文件大小不能超过 5MB)
            if (file.Length > 5 * 1024 * 1024)
            {
                return BadRequest("文件大小不能超过 5MB");
            }

            // 保存文件到服务器指定路径
            var filePath = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles", file.FileName);

            // 确保目标目录存在
            Directory.CreateDirectory(Path.GetDirectoryName(filePath));

            // 保存文件
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }

            return Ok(new { FilePath = filePath });
        }
    }
}

代码解析:

  • 文件大小限制:借助检查 file.Length 来判断文件的大小是否超过指定的最大限制。我们设定文件大小限制为 5MB。

  • 文件类型验证:借助文件的扩展名判断文件类型,只允许上传 .jpg, .jpeg, 和 .png 格式的图片文件。

  • 保存文件:将文件保存在服务器本地,文件保存在 UploadedFiles 文件夹中。你能够根据需求修改保存路径。

  • 得到响应:上传成功后,得到文件的存储路径。

2.3 测试上传接口

现在,我们能够启动项目同时测试文件上传接口。在命令行中运行:

dotnet run

结合项目来看,启动项目后,能够采用 Postman 或其他 API 测试工具发送一个 POST 请求到:

http://localhost:5000/api/fileupload/upload

同时将一个文件作为 file 参数上传。如果上传成功,你将收到类似下面的响应:

{
    "filePath": "D:\netcore\example.jpg"
}

3. 处理多文件上传

在这个场景下,除了单文件上传,你可能还需兼容多文件上传。ASP.NET Core 同样兼容这个功能,方法也很轻松。

3.1 修改 FileUploadController 以兼容多文件上传

[HttpPost("upload-multiple")]
public async Task<IActionResult> UploadMultipleFiles(IFormFile[] files)
{
    if (files == null || files.Length == 0)
    {
        return BadRequest("未选择任何文件");
    }

    foreach (var file in files)
    {
        // 限制文件类型
        var allowedExtensions = new[] { ".jpg", ".jpeg", ".png" };
        var extension = Path.GetExtension(file.FileName).ToLowerInvariant();
        if (!allowedExtensions.Contains(extension))
        {
            return BadRequest("只允许上传 JPG 和 PNG 格式的文件");
        }

        // 限制文件大小
        if (file.Length > 5 * 1024 * 1024)
        {
            return BadRequest("文件大小不能超过 5MB");
        }

        // 保存文件
        var filePath = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles", file.FileName);
        Directory.CreateDirectory(Path.GetDirectoryName(filePath));

        using (var stream = new FileStream(filePath, FileMode.Create))
        {
            await file.CopyToAsync(stream);
        }
    }

    return Ok(new { Message = "文件上传成功" });
}

代码解析:

  • 多文件上传:借助 IFormFile[] files 接收多个文件。

  • 每个文件都会进行相同的类型验证和大小限制。

  • 所有文件都将保存到 UploadedFiles 文件夹中。

4. 前端实现

实际处理时,在前端,你能够采用表单来上传文件。下面是一个轻松的 HTML 表单,允许用户选择并上传多个文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文件上传</title>
</head>
<body>
    <h2>上传文件</h2>
    <form id="fileUploadForm" enctype="multipart/form-data">
        <input type="file" name="file" id="fileInput" multiple />
        <button type="submit">上传</button>
    </form>

    <script>
        document.getElementById('fileUploadForm').addEventListener('submit', function(event) {
            event.preventDefault();

            let formData = new FormData();
            let files = document.getElementById('fileInput').files;
            for (let i = 0; i < files.length; i++) {
                formData.append('files', files[i]);
            }

            fetch('http://localhost:5000/api/fileupload/upload-multiple', {
                method: 'POST',
                body: formData
            })
            .then(response => response.json())
            .then(data => {
                alert('上传成功:' + JSON.stringify(data));
            })
            .catch(error => {
                alert('上传失败:' + error.message);
            });
        });
    </script>
</body>
</html>

代码解析:

  • FormDataFormData 对象允许你轻松地将表单数据(包括文件)发送到服务器。

  • 采用 fetch 发送文件数据到 upload-multiple API。

5. 小结

到此这篇关于ASP.NET Core中实现高效的文件上传的示例的文章就介绍到这了,更多相关ASP.NET Core文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!

您可能感兴趣的文章:
  • ASP.NET Core实现文件上传和下载
  • ASP.NET Core实现多文件上传
  • asp.net core webapi文件上传功能的实现
  • ASP.NET Core单文件和多文件上传同时保存到服务端的方法
  • ASP.NET Core文件上传与下载实例(多种上传方式)
  • asp.net core mvc实现文件上传实例
  • 解决ASP.NET Core Mvc文件上传限制问题实例
  • asp.net core实现文件上传功能

最新游戏

更多

Copyright©2010-2019. All rights reserved | 波波三国游戏官网|[email protected]

备案编号:湘ICP备2022015115号-4