Как сохранить путь к файлу в базе данных?

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-объект ?
  • 0
    Похоже, вы вызываете действие контроллера Upload действии Create . Это не имеет никакого смысла. Если метод Upload используется только для сохранения файла (т.е. это вообще не действие), он должен вернуть string или что-то в этом роде, а не ActionResult .
Показать ещё 4 комментария
Теги:
sql-server
asp.net-mvc-4
entity-framework-4
uploadify

1 ответ

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);
}

Как вам кажется, добавьте элемент управления для свойства path:

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

В javascript захватите возвращаемое значение и установите его внутри нового текстового поля для свойства path в musica:

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

В методе create удалите код для вызова 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

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

  • 0
    Не работает, отображается ошибка: в строке fileName отображается «Нераспознанная escape-последовательность».
  • 0
    @PedroHenrique обновлен. Добавьте еще один ``, чтобы избежать обратной косой черты.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню