Asp.net mvc 如何在MVC4中检索上传的文件

Asp.net mvc 如何在MVC4中检索上传的文件,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,这是我上传文件的控制器代码,它只在数据库中存储标题,实际文件现在存储在文档/文件夹中。我在检索这个上传的文件时遇到了问题,因为我在数据库中只存储了标题。如何检索文件 [AcceptVerbs(HttpVerbs.Post)] public ActionResult UploadFile(string Title) { _Db.Uploads.Add(new Upload() { Title = Title }); _Db.SaveChanges()

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

[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();
    }
因为我只在数据库中存储了标题

看起来您还存储了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
。使用此选项检索上传的文件。

编辑并格式化问题。您还必须在数据库中存储相对路径抱歉,但实际上不了解我实际上是该字段的新成员,因此请在我编写此返回文件PathResult(路径)时详细解释PLZZZZZZZ;它向我显示了一个错误,即它是类型,但像变量一样使用
[HttpGet]
public ActionResult DownloadFile(int ID)
{
    string path1 = String.Format("{0}/{1}", Server.MapPath("~/documents/Files"), ID);
    return FilePathResult(path);
}