我正在尝试使用MVC4进行文件上传,但是在DB中保存对象名称“System.Web.HttpPostedFileWrapper”而不是文件名,即“Songs.MP3”,也不会将文件传输到给定位置.
模型
public class FileUpload { [Key] public int FileUploadID { get; set; } public int AlbumID { get; set; } public string FileType { get; set; } public string FileUploadLocation { get; set; } public virtual Albums Albums { get; set; } }
视图
@using (Html.BeginForm("Create","FileUpload",FormMethod.Post,new { enctype = "multipart/form-data" }))
{
<div class="editor-label"> @Html.LabelFor(model => model.FileUploadLocation) </div> <div class="editor-field"> @Html.TextBoxFor(model => model.FileUploadLocation,new { type = "file",accept = "FileUploadLocation/*" }) @Html.ValidationMessageFor(model => model.FileUploadLocation) </div>
调节器
// // POST: /FileUpload/Create [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(FileUpload fileupload,HttpPostedFileBase FileUploadLocation) { if (ModelState.IsValid) { var fileName = Path.GetFileName(FileUploadLocation.FileName); var path = Path.Combine(Server.MapPath("~/Images/Files"),fileName); FileUploadLocation.SaveAs(path); db.FileUploads.Add(fileupload); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.AlbumID = new SelectList(db.Albumss,"AlbumID","AlbumTitle",fileupload.AlbumID); return View(fileupload); }
文件在〜/ Images / Files位置不可用.
解决方法
这里几乎没有问题.第一个问题是命名约定.您的FileUpload模型将FileUploadLocation属性作为字符串,并且在控制器的Create方法中,您将传递FileUpload fileupload模型和HttpPostedFileBase FileUploadLocation.
其他更重要的问题是您不应该将View Model保存到数据库,它应该映射到某种域对象,而这些域对象又会被保存.例如:
创建新的视图模型:
public class FileUploadviewmodel { public int FileUploadID { get; set; } public int AlbumID { get; set; } public string FileType { get; set; } public HttpPostedFileBase FileUploadFile { get; set; } public virtual Albums Albums { get; set; } }
public class FileUpload { [Key] public int FileUploadID { get; set; } public int AlbumID { get; set; } public string FileType { get; set; } public string FileUploadLocation { get; set; } }
那么你的Controller Create方法应该是这样的:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(FileUploadviewmodel model) { if (ModelState.IsValid) { var fileName = Path.GetFileName(model.FileUploadFile.FileName); var path = Path.Combine(Server.MapPath("~/Images/Files"),fileName); model.FileUploadFile.SaveAs(path); db.FileUploads.Add(new FileUpload { FileUploadID = model.FileUploadID,AlbumID = model.AlbumID,FileType = model.FileType,FileUploadLocation = path }); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.AlbumID = new SelectList(db.Albumss,model.AlbumID); return View(model); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。