如何在mvc 5中上传多个文件到服务器,并使用实体框架存储文件的路径
本文关键字:服务器 实体 路径 存储文件 框架 文件 mvc | 更新日期: 2023-09-27 18:05:42
我正在尝试将文件列表保存到文件系统和EF的路径。我还没有在网上找到一个完整的教程,所以我拼凑了几篇博客文章来找出我需要的东西。我可以保存一个文件,但不能保存多个文件。我知道为什么。这是因为列表在每个文件之后被重新初始化。我试过把东西移进或移出作用域,也试过用其他方式初始化变量。有人能看看我的控制器,看看我能做些什么来修复吗?
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Exclude = "Id")] Incident incident, IEnumerable<HttpPostedFileBase> upload)
{
if (ModelState.IsValid)
{
if (upload != null)
{
int MaxContentLength = 1024 * 1024 * 10; //10 MB
string[] AllowedFileExtensions = new string[] { ".jpg, ", ".gif", ".png", ".pdf", ".doc", "docx", "xls", "xls" };
foreach (var file in upload)
{
if (!AllowedFileExtensions.Contains(file.FileName.Substring(file.FileName.LastIndexOf(".", StringComparison.Ordinal)).ToLower()))
{
ModelState.AddModelError("Upload", "Document Type not allowed. Please add files of type: " + string.Join(", ", AllowedFileExtensions));
}
else if (file.ContentLength > MaxContentLength)
{
ModelState.AddModelError("Upload", "Your file is too large. Maximum size allowed is: " + MaxContentLength + " MB");
}
else
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
file.SaveAs(path);
var photo = new FilePath
{
FileName = Path.GetFileName(file.FileName),
FileType = FileType.Document
};
incident.FilePaths = new List<FilePath> { photo };
}
}
ModelState.Clear();
}
db.Incidents.Add(incident);
db.SaveChanges();
return RedirectToAction("Index");
}
在循环前初始化列表:
incident.FilePaths = new List<FilePath>();
foreach(var file in upload)
{
// your code except last line
incident.FilePaths.Add(photo);
}
// rest of your code