2014-11-12 7 views
1

Я делаю загрузку музыки в свое приложение, используя плагин uploadify, загрузка работает, но когда я сохраню ссылку на путь (где музыка сохраняется в моем проекте), я получаю нулевое значение , кто-нибудь знает, как я могу это сделать?Как сохранить путь к файлу в базе данных?

Загрузить Метод на MusicController

public ActionResult Upload() 
{ 
    var file = Request.Files["Filedata"]; 
    string savePath = Server.MapPath(@"~\mp3\" + file.FileName); 
    file.SaveAs(savePath); 
    return Content(Url.Content(@"~\mp3\" + file.FileName)); 
} 

Создать метод в MusicController

public ActionResult Create(Musica musica) 
     { 
      MembershipUser user = Membership.GetUser(); 
      int userId = Int32.Parse(Membership.GetUser().ProviderUserKey.ToString()); 
      string userName = user.UserName; 

      musica.UserId = userId; 
      musica.NomeArtista = userName; 

      if (musica.isFree) 
      { 

       musica.Preco = 0; 
      } 

      //Here I try to take the path value 
      musica.path = Upload().ToString(); 

      if (ModelState.IsValid) 
      { 
       db.Musicas.Add(musica); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.GeneroId = new SelectList(db.Generos, "GeneroId", "Nome", musica.GeneroId); 
      return View(musica); 
     } 

Об этом случае я только хочу, чтобы сохранить в моей базе данных, эта информация:

~\mp3\MusicExample.mp3 

Кто-нибудь может мне помочь?

+0

Вы просто пытаетесь сохранить этот '~ \ mp3 \ MusicExample.mps' как поле' varchar' в базе данных, или пытаетесь сделать [BLOB] (http://stackoverflow.com/ вопросы/23894716/как к копи-образ-как-varbinay-в-SQL-Server-2008R2/23899574 # 23899574)? – alykins

+0

Похоже, вы вызываете действие контроллера 'Upload' в своем действии' Create'. Это не имеет никакого смысла. Если метод «Загрузить» используется только для сохранения файла (т. Е. Это вовсе не действие), он должен возвращать строку «string» или что-то подобное, а не «ActionResult». –

+0

@alykins Как варчар! –

ответ

2

EDIT: Таким образом, метод загрузки, который вы используете, является асинхронным, и он загружает файл и возвращает путь к файлу на странице. Изменение метода загрузки, чтобы вернуть путь к файлу вы хотите, захватить его в JQuery и создать элемент управления, который содержит информацию, после того, как он загружен:

Ваш метод загрузки должен быть таким:

public ActionResult Upload() 
{ 
    var file = Request.Files["Filedata"]; 
    string savePath = Server.MapPath(@"~\mp3\" + file.FileName); 
    file.SaveAs(savePath); 
    return Content(@"~\mp3\" + file.FileName); 
} 

Somwhere в вашем вид, добавить элемент управления для path собственности:

@Html.EditorFor(model => model.path, new { id = "path"}) 

в JavaScript, захватить возвращаемое значение и установить его внутри нового текстового поля для path собственности в Musica:

'onUploadSuccess': function (file, data, response) { 
       $("#path").val(data); 
      } 

В методе создания, удаления кода для вызова Upload:

//Stuff above here 
if (musica.isFree) 
{ 
    musica.Preco = 0; 
} 

//Here I try to take the path value 
//musica.path = Upload().ToString(); 

if (ModelState.IsValid) 
//stuff below here 

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

+0

Это не работает, отображается ошибка: «Неизвестная escape-последовательность» отображается в строке fileName. –

+0

@PedroHenrique обновлен. Добавьте другой '' ', чтобы избежать обратного слэша. –

+0

@DaveZich Не работает пока, я думаю, это потому, что когда я называю 'musica.path = upload() 'приложение снова запускает метод и выводится исключение nullpointerException –

Смежные вопросы