如何在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");
        }

如何在mvc 5中上传多个文件到服务器,并使用实体框架存储文件的路径

在循环前初始化列表:

incident.FilePaths = new List<FilePath>();
foreach(var file in upload)
{
    // your code except last line
    incident.FilePaths.Add(photo); 
}
// rest of your code