如何在ASP.NET Core MVC中用ADO.NET批量上传图片至数据库
ASP.NET Core MVC + ADO.NET 实现批量图片上传并将URL存入单个属性
实现步骤
1. 修改模型类
替换原有单个文件属性为集合类型,新增用于存储所有图片URL的拼接字符串属性:
public class RentModel { // 接收批量上传的图片文件集合 public List<IFormFile>? Images { get; set; } // 存储所有图片URL的拼接字符串(用逗号分隔) public string? AllPicUrls { get; set; } // 保留原有业务属性... }
2. 修改视图表单
将文件上传控件设置为支持多选,绑定到模型的Images属性:
<form asp-action="aprent" method="post" enctype="multipart/form-data"> <!-- 其他业务表单字段 --> <div> <label>批量上传图片</label> <input type="file" name="Images" multiple accept="image/*" /> </div> <button type="submit">提交上传</button> </form>
3. 更新控制器逻辑
循环处理每个上传文件,生成存储路径与URL,最后拼接所有URL到单个属性:
private readonly IWebHostEnvironment _IWebHostEnvironment; // 通过构造函数注入IWebHostEnvironment... public IActionResult aprent([Bind] RentModel ar) { try { if (ModelState.IsValid && ar.Images != null && ar.Images.Any()) { var picUrlList = new List<string>(); string baseFolder = "image/"; foreach (var file in ar.Images) { if (file.Length > 0) { // 生成唯一文件名避免冲突 string uniqueFileName = $"{Guid.NewGuid()}_{file.FileName}"; string relativePath = $"{baseFolder}{uniqueFileName}"; string serverSavePath = Path.Combine(_IWebHostEnvironment.WebRootPath, relativePath); // 保存文件到服务器静态目录 using (var stream = new FileStream(serverSavePath, FileMode.Create)) { file.CopyTo(stream); } // 记录图片相对URL picUrlList.Add($"/{relativePath}"); } } // 将所有URL用逗号拼接成单个字符串 ar.AllPicUrls = string.Join(",", picUrlList); // 执行数据库存储操作 string res = DB.Saverecord(ar); string pics = DB.imagedb(ar); TempData["msg"] = res; } } catch (Exception ex) { TempData["msg"] = ex.Message; } return View(); }
4. 修改ADO.NET数据库操作类
调整SQL语句,插入单个AllPicUrls字段(需确保数据库表已新增对应字段):
public string imagedb(RentModel img) { try { con.Open(); // 假设数据库表已新增AllPicUrls字段,类型建议为NVARCHAR(MAX) SqlCommand cmd = new SqlCommand("INSERT INTO img (AllPicUrls) VALUES (@AllPicUrls)", con); cmd.Parameters.AddWithValue("@AllPicUrls", img.AllPicUrls ?? DBNull.Value); cmd.ExecuteNonQuery(); con.Close(); return "ok"; } catch (Exception ex) { if (con.State == ConnectionState.Open) { con.Close(); } return ex.Message.ToString(); } }
注意事项
- 数据库表需新增
AllPicUrls字段,推荐使用NVARCHAR(MAX)类型以容纳大量URL - 可根据业务需求调整URL分隔符(如分号、竖线),后续读取时需对应拆分
- 建议增加文件大小、格式校验逻辑,防止非法文件上传
- 使用
using语句管理文件流,避免资源泄漏
内容的提问来源于stack exchange,提问作者Creative Things
相关产品推荐
相关产品推荐

