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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:55:17