如何在mvc 4中检索上传的文件

时间:2015-06-01 08:58:54

标签: asp.net-mvc asp.net-mvc-4

这是我上传文件的控制器代码,它只将标题存储在数据库中,实际文件现在存储在documents / file文件夹中。我在检索此上传文件时遇到问题,因为我只在数据库中存储了标题。如何检索文件?

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult UploadFile(string Title)
    {
        _Db.Uploads.Add(new Upload() { Title = Title });
        _Db.SaveChanges();

        int Id = (from a in _Db.Uploads select a.Upload_id).Max();
        if(Id>0)
        {
            if(Request.Files["file"].ContentLength>0)
            {
                string extension = System.IO.Path.GetExtension(Request.Files["file"].FileName);
                string path1 = String.Format("{0}/{1}{2}", Server.MapPath("~/documents/Files"), Id, extension);
                if (System.IO.File.Exists(path1))
                    System.IO.File.Delete(path1);
                Request.Files["file"].SaveAs(path1);
            }
            ViewData["Sucess"] = "success";
        }
        else
        {
            ViewData["Success"] = "Upload Failed";
        }

        return View();
    }

1 个答案:

答案 0 :(得分:0)

  

因为我只在数据库中存储了标题

 _Db.Uploads.Add(new Upload() { Title = Title });
 from a in _Db.Uploads select a.Upload_id

您似乎还要存储ID,而不仅仅是标题

保存路径使用此ID。

string path1 = String.Format("{0}/{1}", Server.MapPath("~/documents/Files"), Id);

(我暂时删除了扩展程序)

因此,只需使用您要重新加载的文件的ID读回文件:

[HttpGet]
public ActionResult DownloadFile(int ID)
{
    string path1 = String.Format("{0}/{1}", Server.MapPath("~/documents/Files"), ID);
    return FilePathResult(path);
}

(otomh,未经测试)

当然,最好的解决方案是使用标题和ID来保留文件名+扩展名(不需要路径,如果它总是相同的)。

修改:更多详情:

您当前存储了标题和ID,将其更改为还存储文件名路径 path1。使用它来检索上传的文件。