Загрузить несколько изображений, но хранить в базе данных только одно изображение - PullRequest
1 голос
/ 22 февраля 2020

Как загрузить несколько изображений?

Я хочу загрузить несколько изображений в базу данных; Я выбираю несколько изображений и затем нажимаю кнопку загрузки, но она вставляет только одно изображение. Может ли какой-нибудь эксперт сказать мне, где я иду не так?

Image класс:

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 exceeded";  
                   }  
                   else  
                       ViewBag.fileformat = "File is not the correct format";  
               } 
        }
} 

1 Ответ

1 голос
/ 22 февраля 2020

Поскольку вы ссылались на шаблон MCV и использовали такие термины, как «загрузка», я собираюсь предположить, что это веб-разработка. Я также предполагаю, что ваш шаблон:

  • пользователь загружает кучу изображений
  • вы выполняете некоторую обработку изображений
  • вы представляете обработанные изображения, поэтому пользователь может выбрать один
  • , который на самом деле сохраняется

Ответ «Пересмотреть этот путь»

Если вы это сделаете, это определенно плохой подход. Передача массовых данных только для того, чтобы фактически использовать их часть? Очень распространенная ошибка новичков в разработке веб и баз данных. Другая нагрузка на процессор - на стороне сервера.

Какую бы обработку вы ни выполняли, в идеале вы должны делать это на стороне клиента: плагин для браузера. Индивидуальное клиентское приложение. JavaScript элемент. Даже просто требуя от пользователя заданный формат c. Что-то в этом роде. И только затем загружайте это указанное c изображение.

Если сервер никогда не должен видеть бит из тех изображений, которые вам не нужны, это хороший дизайн.

Постановка таблица / база данных

Это ответ, который вы действительно придерживаетесь своего подхода или по какой-то причине он не подходит. Чтобы серверный процесс обрабатывал изображение и отображал его, необходимо сохранить на стороне сервера.

В памяти это не вариант. WebServers, как известно, с чрезвычайно продуманным дизайном и ThreadPools 50-100 потоков на ядро ​​ЦП, как известно, легко запускает из ресурсов, в частности из памяти . И это подразумевает, что вы можете на самом деле сохранить что-то в памяти, как это для начала (дизайн не делает это легким, чтобы сбить вас с этого пути).

Таким образом, следующая лучшая ставка - это промежуточный стол или темп. каталог. Что-то, где вы можете:

  • хранить изображения, которые вы только что загрузили
  • иметь некоторый фоновый процесс обработки их
  • вы можете передать обработанные изображения из
  • вы можете передать одно изображение, которое пользователь хочет, в надлежащую постоянную базу данных
  • что-то, что регулярно очищает любые данные, которые пользователь никогда не принимал решения по

Лично я бы посоветовал для отдельного набора таблиц БД. В наши дни временные директории являются уязвимостью безопасности, которую ни один администратор не должен принимать без поиска альтернатив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...