MVC 5中的文件上传

时间:2014-11-24 16:33:26

标签: asp.net-mvc file-upload asp.net-mvc-5

我正在开发MVC 5应用程序并使用MS SQL Server作为数据库。我在此应用程序中有表单,它将事件详细信息存储在数据库中。在这种形式我有一个文件上传字段。实际上我想在服务器上的文件夹中上传图像并将其URL存储在数据库中,以便可以在我的前端使用URL。

以下是我的创建操作方法

public ActionResult Create([Bind(Include = "Id,Event_Name,Event_Description,Event_Detail,Image_Url,Event_Date,User_Name,Date_Uploaded,Category_ID")] WASA_Events wASA_Events)
        {
            var filePath = FileUpload();//Function call to get the uploaded file path
            wASA_Events.Image_Url = filePath;
            if (ModelState.IsValid)
            {
                db.WASA_Events.Add(wASA_Events);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.Category_ID = new SelectList(db.WASA_Events_Category, "id", "Event_Category", wASA_Events.Category_ID);
            return View(wASA_Events);
        }

和将返回文件路径的FileUpload函数在

下面
public string FileUpload()
        {
            var filePath = "";
            if(Request.Files.Count > 0)
            {
                var file = Request.Files[0];
                if(file!=null && file.ContentLength > 0)
                {
                    var fileName = Path.GetFileName(file.FileName);
                    var path = Path.Combine(Server.MapPath("~/images/uplods/"), fileName);
                    file.SaveAs(path);
                    filePath = path;
                }
            }
            return (filePath);
        }

在我看来,我使用了以下

@using (Html.BeginForm("Create", "WASA_Events", FormMethod.Post, new { enctype = "multipart/form-data" }))

现在问题是我在Request.Files.Count中什么都没有,意味着它的值为零。所以无法继续前进。

任何帮助。

2 个答案:

答案 0 :(得分:0)

检查以下内容。,。,

  1. 检查您是否可以在Create Action本身中获取请求中的文件。我确信请求也会在FileUpload方法中保持状态。但请检查它是否不合适。

  2. 文件上传输入是否在您在视图中使用的表单内?

  3. 文件上传输入是否为任何第三方控件?如果是这样,请在浏览器中选择文件后检查是否在HTML中的文件上传输入中更新了文件名。

  4. 有点疯狂的检查是你是否选择了一个文件并选择在浏览器中上传文件。,。,

答案 1 :(得分:-1)

我刚刚通过添加以下类

来完成文件上传
public class Pictures
    {
        public HttpPostedFileBase File { get; set; }
    }

然后在我的create Controller操作方法中使用它。以下是控制器操作的代码

if (picture.File.ContentLength > 0)
            {
                var fileName = Path.GetFileName(picture.File.FileName);
                var path = Path.Combine(Server.MapPath("~/assets/uploads/events/"), fileName);
                picture.File.SaveAs(path);
            }

并在视野中

<input type="file" id="File" name="File" class="form-control"/>

这解决了我的问题