这是我上传文件的控制器代码,它只将标题存储在数据库中,实际文件现在存储在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();
}
答案 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
。使用它来检索上传的文件。