使用ASP.NET MVC将文件上载到数据库中

时间:2013-02-27 07:13:46

标签: asp.net-mvc asp.net-mvc-scaffolding

我想在我的表单上提供一个工具,供用户上传文件并保存在数据库中。 如何在ASP.NET MVC中完成。

要在我的模型类中编写什么DataType。我尝试使用Byte[],但在脚手架中,解决方案无法在相应的视图中为其生成适当的HTML。

这些案件是如何处理的?

1 个答案:

答案 0 :(得分:40)

您可以在模型上使用byte[],在视图模型上使用HttpPostedFileBase。例如:

public class MyViewModel
{
    [Required]
    public HttpPostedFileBase File { get; set; }
}

然后:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        byte[] uploadedFile = new byte[model.File.InputStream.Length];
        model.File.InputStream.Read(uploadedFile, 0, uploadedFile.Length);

        // now you could pass the byte array to your model and store wherever 
        // you intended to store it

        return Content("Thanks for uploading the file");
    }
}

最后在你看来:

@model MyViewModel
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div>
        @Html.LabelFor(x => x.File)
        @Html.TextBoxFor(x => x.File, new { type = "file" })
        @Html.ValidationMessageFor(x => x.File)
    </div>

    <button type="submit">Upload</button>
}