2016-01-05 2 views
0

Я пытаюсь сохранить изображение в папке и сохранить путь в базе данных с использованием структуры сущности в asp.net mvc 5. Я сделал это, но у меня есть некоторые проблемы.Как изменить путь к карте сервера и имя файла при загрузке файла в asp.net mvc?

путь изображения в БД сохраняются так:

C:\Users\Shima\Documents\Visual Studio 2013\Projects\NP1\NP1\Images\SubGoods\2.jpg 

Как я могу изменить его: ~/Images/SubGoods/2.jpg ??

и я хочу, чтобы изменить имя изображения, чтобы это primary key id и я использовал pic =Convert.ToString(subgood.SubGoodID);, чтобы сделать это, но это экономит Зеро:

C:\Users\Shima\Documents\Visual Studio 2013\Projects\NP1\NP1\Images\SubGoods\0 

Это экономит всегда 0 .Я знаю, что это потому, что первичный ключ в этой строке не генерируется все же . где из моих кодов генерируется primary Key id?

public ActionResult AddSubGood(SubGood subgood, HttpPostedFileBase UploadImage) 
    { 
     var MainGoodId = subgood.FKMainGoodID; 
     SubGoodRepositories blSubGood = new SubGoodRepositories(); 
     string path=""; 
     if (UploadImage != null) 
     { 
      string pic = System.IO.Path.GetFileName(UploadImage.FileName); 
      pic =Convert.ToString(subgood.SubGoodID); 
      path = System.IO.Path.Combine(
            Server.MapPath("~/Images/SubGoods"), pic); 

     } 

     if (ModelState.IsValid) 
     { 
      subgood.FKMainGoodID = MainGoodId; 
      UploadImage.SaveAs(path); 
      subgood.SubGoodImage = path; 

      if (blSubGood.Add(subgood)) 
      { 
       return JavaScript("alert('saved');"); 
      } 
      else 
      { 
       return JavaScript("alert('didn't saved');"); 
      } 
     } 
     else 
     { 
      return JavaScript("alert('error');"); 
     } 

    } 
+0

вы можете добавить «/ Images/SubGoods» в web.config и сохранить только имя файла в базе данных. Конкатенайте их, когда вы хотите получить доступ к файлу. – adiga

+0

Не уверен в сохранении файла с PK. Поскольку сначала вы сохраняете файл физически, а затем сохраняете URL-адрес в БД. Сохранение файла с меткой времени - лучший вариант imo. – adiga

+0

Спасибо, это означает, что нет способа сделать это, используя 'Server.MapMath'? @adiga –

ответ

1

Вы должны сохранить только имя файла:

var fileName = Path.GetFileName(UploadImage.FileName); 

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

<img src="~/Content/Uploaded/@item.fileName" .../> 

Вы также можете сгенерировать случайное имя файла с помощью Guid:

var rondom = Guid.NewGuid() + fileName; 
1

Server.MapPath вернет вам виртуальный путь (который вы не нужны), вы можете создать еще одну переменную и сцепить следующим образом:

string DbPath = "~/Images/SubGoods/"; // better to store in web.config file 
DbPath = DbPath + ""//here you can query in table and find the last inserted primary key and increment it with '1' 
Смежные вопросы