上传多个图像,但仅在数据库中存储一个图像

问题描述 投票:1回答:1

如何上传多张图片?嗨,我想在数据库中上传多张图片,我选择了多张图片然后上传按钮,但只在数据库中插入了一张图片,任何专家都可以告诉我我哪里错了。

图像

public partial class Image  
    {  
        public int imgID { get; set; }  
        public string ImgPath { get; set; }  
        public long ProdID { get; set; }  

        public virtual Product Product { get; set; }  
    }  

控制者

public ActionResult AddNewProducts(ProductViewModel prod, List file)  
       {  
           try  
           {  
               List PTlist = _IproductType.PTList();  
               ViewBag.Ptlist = new SelectList(PTlist, "PType_ID", "P_Name");  

               //Product Color List  
               List pColorList = _IProductColor.PColorlist();  
               ViewBag.pColor_List = new SelectList(pColorList, "C_ID", "C_Name_OR_Code");  

               List pSizeList = _ISize.pSizeList();  
               ViewBag.pSizeLists = new SelectList(pSizeList, "S_ID", "S_Size");  


           string PathDB = string.Empty;  
               Image img = new Image();  
               foreach (HttpPostedFileBase files in file)  
               {  
                   string filename = Path.GetFileName(files.FileName);  
                   string _filename = DateTime.Now.ToString("yymmssff") + filename;  
                   string extension = Path.GetExtension(files.FileName);  
                   string path = Path.Combine(Server.MapPath("~/Upload/"), _filename);  
                   PathDB = "~/Upload/" + _filename;  
                   if (extension.ToLower() == ".jpeg" || extension.ToLower() == ".jpg" || extension.ToLower() == ".png")  
                   {  
                       if (files.ContentLength <= 1000000)  
                       {  
                           img = new Image();  
                           img.imgID = prod.ImgID;  
                           img.ImgPath = PathDB;  
                           img.ProdID = prod.ProductID;  

                       }  
                       else  
                           ViewBag.sizemsg = "Size Limit accessed ";  
                   }  
                   else  
                       ViewBag.fileformat = "File is not Format is not Correct";  

               } 
}
} 
c# entity-framework model-view-controller
1个回答
0
投票

用户上传了一堆图像

    您对图像进行了一些处理
  • 您呈现已处理的图像,因此用户可以选择一个
  • 那个实际上是持久的
  • “重新考虑此路径”的答案

    如果您这样做,那肯定是一个不好的方法。将批量数据转移到仅实际使用的一小部分? Web和数据库开发是一个非常常见的初学者错误。将大量CPU工作放在服务器端是另一回事。

    [无论您正在进行什么处理,理想情况下,您都应该在客户端上进行:浏览器插件。自定义客户端应用程序。 JavaScript元素。即使只是要求用户提供特定格式。诸如此类的事情。然后仅上传该特定图像。

    如果服务器永远不需要从不需要的图像中看到一点,那是一个很好的设计。

    登台表/数据库

    这是您对方法的真正承诺,或者出于某种原因这不是一个选择。为了使服务器处理并显示图像,必须将其必须保存在服务器端。

    在内存中并不是真正的选择。凭借大规模的paralell设计以及每个CPU内核50-100个线程的ThreadPool,众所周知,WebServer易于运行out of resources, particular memory。并假设您实际上可以像在开始时那样在内存中保留某些内容(设计并没有那么容易,这使您脱离了那条路)。

    因此,下一个最佳选择是登台表或临时目录。您可以在这里进行的操作:

    存储您刚刚上传的图像

    • 具有一些后台处理程序来处理它们>>
    • 您可以将处理后的图像移出
    • 您可以将用户想要的一张图像传输到适当的持久数据库中
    • 这是常规操作,它会清除用户从未决定的任何数据
    • 我个人建议单独使用一组数据库表。在当今,临时目录是一个安全漏洞,任何管理员在寻找替代方案之前都不应接受。
    © www.soinside.com 2019 - 2024. All rights reserved.