You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 7中如何判定并验证上传视频的分辨率?

验证上传视频分辨率的实现方案(ASP.NET Core 7)

要实现视频分辨率验证,核心是解析视频元数据获取分辨率,再结合ASP.NET Core的模型验证机制完成校验,具体步骤如下:

1. 引入视频元数据解析库

直接解析视频文件需要处理复杂的编码格式,推荐用成熟的第三方库简化操作,比如FFmpegCore:

  • 通过NuGet安装:Install-Package FFmpegCore
  • 需确保项目中存在FFmpeg可执行文件(可从FFmpeg官方渠道下载对应平台版本,放到项目根目录并设置"复制到输出目录"为"始终复制")

2. 实现自定义验证属性

创建继承自ValidationAttribute的自定义验证类,用于校验视频分辨率:

using FFmpegCore;
using Microsoft.AspNetCore.Http;
using System.ComponentModel.DataAnnotations;
using System.Linq;

public class VideoResolutionAttribute : ValidationAttribute
{
    private readonly int _requiredWidth;
    private readonly int _requiredHeight;

    public VideoResolutionAttribute(int requiredWidth, int requiredHeight)
    {
        _requiredWidth = requiredWidth;
        _requiredHeight = requiredHeight;
        ErrorMessage = $"视频分辨率必须为{_requiredWidth}×{_requiredHeight}";
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value is not IFormFile file || file.Length == 0)
        {
            return new ValidationResult("请上传有效的视频文件");
        }

        try
        {
            using var stream = file.OpenReadStream();
            var mediaInfo = FFmpeg.GetMediaInfo(stream);
            var videoStream = mediaInfo.VideoStreams.FirstOrDefault();

            if (videoStream == null)
            {
                return new ValidationResult("上传的文件不是视频");
            }

            if (videoStream.Width != _requiredWidth || videoStream.Height != _requiredHeight)
            {
                return new ValidationResult(ErrorMessage);
            }

            return ValidationResult.Success;
        }
        catch (Exception ex)
        {
            return new ValidationResult($"解析视频信息失败:{ex.Message}");
        }
    }
}

3. 给请求模型添加验证属性

修改UploadMediaRequest模型,将自定义验证属性加到Media字段上:

using Microsoft.AspNetCore.Http;
using System.ComponentModel.DataAnnotations;

public class UploadMediaRequest
{
    [Required]
    [VideoResolution(800, 468)] // 指定要求的分辨率:800×468
    public IFormFile Media { get; set; }
}

4. 控制器中接收并验证请求

在控制器的Action中直接使用模型绑定,ASP.NET Core会自动触发验证:

using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/media")]
public class MediaController : ControllerBase
{
    [HttpPost("upload")]
    public IActionResult UploadVideo([FromForm] UploadMediaRequest request)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        // 验证通过,执行后续上传逻辑
        return Ok("视频上传成功");
    }
}

注意事项

  • 若部署到服务器,需配置FFmpeg可执行文件路径,可通过FFmpegOptions.SetExecutablesPath指定
  • 大文件上传时,需在Program.cs中配置请求大小限制:
    builder.Services.Configure<Microsoft.AspNetCore.Http.Features.FormOptions>(options =>
    {
        options.MultipartBodyLengthLimit = 1073741824; // 1GB
    });
    
  • 可根据需求扩展验证逻辑,比如支持多种分辨率、宽高比校验等

内容的提问来源于stack exchange,提问作者kanils_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:17:13