Загрузка файлов в базу данных с помощью ASP.NET MVC

Я хочу предоставить в моей форме возможность пользователю загружать файлы и сохранять их в базе данных. Как это делается в ASP.NET MVC.

Какой тип данных писать в моем классе модели. Я пробовал с Byte[], но во время создания шаблона решение не смогло сгенерировать для него соответствующий HTML в соответствующем представлении.

Как обрабатываются эти дела?


person Mangesh Kaslikar    schedule 27.02.2013    source источник


Ответы (1)


Вы можете использовать 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>
}
person Darin Dimitrov    schedule 27.02.2013
comment
Привет, это потрясающе, но как абсолютный нуб, где лучше всего хранить файлы, если, например, я хочу только разрешить администратору сайта загружать файлы (файл приложения .exe), которые пользователи могут загружать ? - person MoonKnight; 06.11.2014
comment
Не могли бы вы подробнее рассказать о pass the byte array to your model - person Juan Carlos Oropeza; 02.05.2018
comment
@JuanCarlosOropeza в модели, которую вы сохраняете в базе данных, у вас будет свойство с именем File типа byte[] с геттером/сеттером. Затем вызовите myModel.File = uploadedFile.ToArray(), который скопирует массив байтов в вашу модель, а затем сохранит его в базе данных (при условии, что это делается через Entity Framework). - person Bil Simser; 25.05.2018