web-dev-qa-db-fra.com

Téléchargement de fichiers dans la base de données avec ASP.NET MVC

Je veux donner une facilité sur mon formulaire pour que l'utilisateur puisse télécharger des fichiers et les enregistrer dans la base de données. Comment cela se fait-il dans ASP.NET MVC.

Quel type de données écrire dans ma classe modèle. J'ai essayé avec Byte[], mais pendant l'échafaudage, la solution n'a pas pu générer le code HTML approprié dans la vue correspondante.

Comment ces cas sont-ils traités?

18
Mangesh Kaslikar

Vous pouvez utiliser un byte[] sur votre modèle et HttpPostedFileBase sur votre modèle de vue. Par exemple:

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

puis:

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

et enfin selon vous:

@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>
}
41
Darin Dimitrov