【问题标题】:How to save a file path at database?如何在数据库中保存文件路径?
【发布时间】:2014-11-13 06:43:06
【问题描述】:

我正在使用 uploadify 插件将音乐上传到我的应用程序,上传工作正常,但是,当我保存路径引用(音乐保存在我的项目中的位置)时,我得到 null值,有人知道我该怎么做吗?

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

有人可以帮助我吗?

【问题讨论】:

  • 您只是想将此~\mp3\MusicExample.mps 保存为数据库中的varchar 字段,还是尝试创建BLOB
  • 看起来您在 Create 操作中调用了 Upload 控制器操作。这没有任何意义。如果Upload 方法的唯一用途是保存文件,(即它根本不是一个动作)它应该返回一个string 或类似的东西,而不是ActionResult
  • @alykins 作为 varchar!
  • @DaveZych 我正在使用本教程进行上传 jayendraka.wordpress.com/2013/10/18/…,在本教程中,他使用 ActionResult on 方法创建。
  • 但是动作结果不是字符串。 ActionResult 对象可能有属性吗?

标签: c# sql-server asp.net-mvc-4 entity-framework-4 uploadify


【解决方案1】:

编辑:所以您使用的上传方法是异步的,它上传文件并将文件路径返回到页面。更改上传方法以返回您想要的文件路径,在 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中,捕获返回值并将其设置在musica中path属性的新文本框中:

'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 属性设置为文件路径,并且应该可以正常工作

【讨论】:

  • 不起作用,显示错误:文件名行显示“无法识别的转义序列”。
  • @PedroHenrique 已更新。添加另一个 `` 来转义反斜杠。
  • @DaveZich 还没有工作,我认为这是因为当我调用 musica.path = upload() 时,应用程序再次运行该方法并显示 nullpointerException
  • 我认为应该在上传方法上添加模型的引用,例如:musicReference.path = "~\\mp3\\"+file.FileName;,而在创建方法中,必须将音乐引用称为:musica.path = musicReference.path; 你怎么看?
  • 您有单独的上传和创建操作吗?意思是,用户点击一个按钮上传,然后在页面重新加载后他们点击另一个按钮进行创建?这里没有足够的信息来提供比我更多的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多