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
相关产品推荐
相关产品推荐

