Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Uploading Files into Database with ASP.NET MVC

I want to give a facility on my form for user to upload files and save in Database. How is this done in ASP.NET MVC.

What DataType to write in my Model Class. I tried with Byte[], but during the scaffolding the solution could not generate the appropriate HTML for it in the corresponding View.

How are these cases handled?

like image 659
Mangesh Kaslikar Avatar asked Feb 27 '13 07:02

Mangesh Kaslikar


People also ask

How can add data in database in MVC?

Right-click on Controllers folder and select Add >> New Items... An “Add New Item” dialog box will open. Select Web from the left panel, then select “MVC Controller Class” from templates panel, and put the name as Employee12Controller. cs.


1 Answers

You could use a byte[] on your model and a HttpPostedFileBase on your view model. For example:

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

and then:

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

and finally in your view:

@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>
}
like image 61
Darin Dimitrov Avatar answered Oct 24 '22 19:10

Darin Dimitrov