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

ASP.NET Core Web API 7实现头像上传至数据库及200KB大小校验

实现头像上传并保存至数据库(含200KB大小限制)

1. 调整Person实体类

原Image字段为string,建议改为byte[]存储图片二进制数据,更适配数据库存储且效率更高:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PersonalCode { get; set; }
    public string NationalCode { get; set; }
    public string PhoneNumber { get; set; }
    public string MobilePhoneNumber { get; set; }
    public string EmailAddress { get; set; }
    // 改为byte[]存储图片二进制数据,对应数据库VARBINARY(MAX)类型
    public byte[] Image { get; set; }
    public bool IsDeleted { get; set; }
    public bool HasAccount { get; set; }
    public User User { get; set; }
}

若需存储Base64字符串,可保留string类型,但需确保数据库字段设为NVARCHAR(MAX)以容纳足够长度。

2. 完善上传控制器方法

修正方法参数与逻辑,实现文件接收、大小校验、转换及数据库保存:

// 修正方法名拼写:UploadProfilePicture
[HttpPost]
public async Task<IActionResult> UploadProfilePicture(IFormFile picture)
{
    // 校验文件是否存在
    if (picture == null || picture.Length == 0)
    {
        return BadRequest("请选择要上传的头像文件");
    }

    // 校验文件大小(200KB = 200 * 1024字节)
    const int maxFileSize = 200 * 1024;
    if (picture.Length > maxFileSize)
    {
        return BadRequest("头像文件大小不能超过200KB");
    }

    // 可选:校验文件类型(仅允许常见图片格式)
    var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif" };
    var fileExtension = Path.GetExtension(picture.FileName).ToLower();
    if (!allowedExtensions.Contains(fileExtension))
    {
        return BadRequest("仅支持JPG、JPEG、PNG、GIF格式的图片");
    }

    try
    {
        // 将文件转换为byte数组
        byte[] imageBytes;
        using (var memoryStream = new MemoryStream())
        {
            await picture.CopyToAsync(memoryStream);
            imageBytes = memoryStream.ToArray();
        }

        // 保存到数据库(示例为新增Person,实际可改为更新已有用户头像)
        var person = new Person
        {
            // 按需填充其他字段
            FirstName = "示例名",
            Image = imageBytes
        };
        _context.Persons.Add(person);
        await _context.SaveChangesAsync();

        return Ok("头像上传成功");
    }
    catch (Exception ex)
    {
        return StatusCode(500, $"上传失败:{ex.Message}");
    }
}

3. 关键说明

  • 参数类型:使用IFormFile接收上传文件,这是ASP.NET Core处理文件上传的标准方式,替代原string参数。
  • 大小校验:通过picture.Length直接获取文件字节数,与200KB阈值对比,超出则返回明确警告。
  • 数据库存储:byte[]对应数据库的二进制字段,相比Base64字符串更节省存储空间、读写效率更高。
  • 错误处理:覆盖了文件为空、类型不符、上传异常等场景,保证接口的健壮性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:07:33