搜索

查看: 3071|回复: 11

[ASP.NET] ASP.NET MVC解决上传图片脏数据的方法

[复制链接]
发表于 2023-5-4 11:34:07 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:34:07 3071 11 看全部
在"在ASP.NET MVC下实现单个图片上传, 客户端服务端双重限制图片大小和格式, 服务端裁剪图片"中,已经实现了在客户端和服务端限制图片大小和格式,以及在服务端裁剪图片。但还有一个重要的话题是需要面对的,那就是图片脏数据问题。
假设用户添加产品信息,并且上传了图片,可之后用户没有点击页面上的添加按钮,这就导致上传图片成为"脏数据",存在着却一直不会被使用。解决这个问题的大致思路是:
  • 在上传图片的时候,把图片保存到一个临时文件夹,或者叫缓存文件夹
  • 当用户真正保存的时候,再把临时文件夹的图片拷贝到最终目标文件夹
    假设,有这样的一个Model,它的ImageUrl属性,用来存放图片真正的相对路径。
        public class ImgVm
        {
            [Required(ErrorMessage = "必填")]
            public string ImageUrl { get; set; }
        }
    在HomeController中,存在如下的一些Action:
  • 提供一个显示上传页面的Action,并且是ImgVm类型的强类型视图,ImgVm的ImageUrl属性用来存放上传图片的相对路径
  • 提供一个接收ImgVm类型的Action,把临时文件夹内的图片复制到目标文件夹内,并且给ImgVm的ImageUrl属性赋上新的图片相对路径
            public ActionResult Index()
            {
                return View(new ImgVm());
            }
            [HttpPost]
            public ActionResult Index(ImgVm imgVm)
            {
                if (ModelState.IsValid)
                {
                    //目标文件夹路径
                    string pathForRealSaving = Server.MapPath("~/RealUpload/");
                    //目标文件夹内的用户文件夹路径
                    string pathForRealUserSaving = Server.MapPath("~/RealUpload/User001/");
                    //当前文件路径
                    string existingFilePath = Server.MapPath(imgVm.ImageUrl);
                    //当前文件名,根据文件路径获得
                    string existingFileName = Path.GetFileName(existingFilePath);
                    if (CreateFolderIfNeeded(pathForRealSaving))
                    {
                        if (CreateFolderIfNeeded(pathForRealUserSaving))
                        {
                            //根据当前文件路径获取当前文件
                            var existingfile = Path.GetFullPath(existingFilePath);
                            //获取目标文件夹内的目标文件
                            var realfile = Path.Combine(pathForRealUserSaving, existingFileName);
                            //把临时文件内的图片复制到目标文件夹内
                            System.IO.File.Copy(existingfile, realfile, true);
                            
                            //保存新的图片相对路径
                            imgVm.ImageUrl = "RealUpload/User001/" + existingFileName;
                        }
                    }
                  
                    return View("showimg", imgVm);
                }
                else
                {
                    return Index(imgVm);
                }
            }
    Home/Index.cshtml中多了在上传图片成功后给id为ImageUrl隐藏域赋值的部分。
    @model MvcApplication10.Models.ImgVm
    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
        #msg {
            color: red;
        }
    @using (Html.BeginForm("Index", "Home", FormMethod.Post, new {id = "addForm", @class = "form-horizontal"}))
    {
       
       

       
       
            

       
       
            
          
       
       
            @Html.HiddenFor(m => m.ImageUrl)
            
       
    }

    @section scripts
    {
       
       
    }
    还有一个Home/showimg.cshtml视图,用来显示新的(相对临时文件夹中的那张图片)图片。
    @model MvcApplication10.Models.ImgVm
    @{
        ViewBag.Title = "showimg";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    showimg

    当然,存放上传图片的临时文件夹是可以随时清理的。
    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对知鸟论坛的支持。如果你想了解更多相关内容请查看下面相关链接
  • 回复

    使用道具 举报

    发表于 2023-6-28 20:36:48 | 显示全部楼层
    123456819 2023-6-28 20:36:48 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-6-28 23:51:08 | 显示全部楼层
    ffycxyw2274436 2023-6-28 23:51:08 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-29 18:35:11 | 显示全部楼层
    米老鼠和蓝精鼠v 2023-6-29 18:35:11 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-6-29 19:52:39 | 显示全部楼层
    术数古籍专卖疤 2023-6-29 19:52:39 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-6-29 22:53:11 | 显示全部楼层
    麻辣鸡翅 2023-6-29 22:53:11 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-6-30 03:46:40 | 显示全部楼层
    123456848 2023-6-30 03:46:40 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    发表于 2023-6-30 10:18:56 | 显示全部楼层
    我是的十八簿 2023-6-30 10:18:56 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-30 11:12:25 | 显示全部楼层
    123456833 2023-6-30 11:12:25 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-6-30 12:29:19 | 显示全部楼层
    永远就三年疗 2023-6-30 12:29:19 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表