Загрузите несколько изображений и конвертируйте в base64 перед сохранением в базу данных - PullRequest
0 голосов
/ 04 января 2019

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

Вот то, что я уже получил:

Просмотр:

<div class="col-xs-12 col-sm-12 col-md-6 col-lg-4 ">
    <div class="form-group">
        @Html.LabelFor(Model => Model.VueSiegeArriere, new { @class = "control-label", })
        @Html.TextBoxFor(Model => Model.VueSiegeArriere, new { @class = "form-control", type = "file", accept = "image/x-png,image/jpeg", id = "VueSiegeArriere" })
    </div>
</div>
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-4 ">
    <div class="form-group">
        @Html.LabelFor(Model => Model.VueSiegeAvant, new { @class = "control-label", })
        @Html.TextBoxFor(Model => Model.VueSiegeAvant, new { @class = "form-control", type = "file", accept = "image/x-png,image/jpeg", id = "VueSiegeAvant" })
    </div>
</div>

Контроллер:

[HttpPost]
    public ActionResult AddVoiture(VoitureVM v, HttpPostedFileBase VueFace, HttpPostedFileBase VueArriere, HttpPostedFileBase VueGauche, HttpPostedFileBase VueDroite, HttpPostedFileBase VueSiegeArriere, HttpPostedFileBase VueSiegeAvant, HttpPostedFileBase MalleArriere, HttpPostedFileBase TableauBord)

    {
        Voiture Car = new Voiture();

        v.VueFace = UploadandConvertImage(VueFace);
        v.VueGauche = UploadandConvertImage(VueGauche);
        v.VueSiegeArriere = UploadandConvertImage(VueSiegeArriere);
        v.VueSiegeAvant = UploadandConvertImage(VueSiegeAvant);
        v.VueDroite = UploadandConvertImage(VueDroite);
        v.TableauBord = UploadandConvertImage(TableauBord);
        v.VueArriere = UploadandConvertImage(VueArriere);
        v.MalleArriere = UploadandConvertImage(MalleArriere);

        return RedirectToAction("Liste");
        //return View(v);
    }

Метод UploadandConvertImage, который я вызываю в контроллере:

string base64String;
    private string UploadandConvertImage(HttpPostedFileBase file)
    {

        if (file != null)
        {
            string pic = System.IO.Path.GetFileName(file.FileName);
            string path = System.IO.Path.Combine(Server.MapPath("~/Pictures/Voitures"), pic);
            // file is uploaded
            file.SaveAs(path);

            //wish to convert the uploaded images to base64 and store them in database
            using (System.Drawing.Image image = System.Drawing.Image.FromFile(path))
            {
                using (MemoryStream m = new MemoryStream())
                {
                    image.Save(m, image.RawFormat);
                    byte[] imageBytes = m.ToArray();
                    base64String = Convert.ToBase64String(imageBytes);
                    //return base64String;
                }
            }
        }
        return base64String;
    }

Сохранение в базу данных:

//Let's now insert details into the table ImagesVoitures
        ImagesVoiture carImages = new ImagesVoiture();

        carImages.VueFace = voiture.VueFace;
        carImages.VueGauche = voiture.VueGauche;
        carImages.VueDroite = voiture.VueDroite;
        carImages.VueSiegeArriere = voiture.VueSiegeArriere;
        carImages.VueSiegeAvant = voiture.VueSiegeAvant;
        carImages.TableauBord = voiture.TableauBord;
        carImages.MalleArriere = voiture.MalleArriere;
        carImages.VueArriere = voiture.VueArriere;

        bdd.ImagesVoiture.Add(carImages);
        bdd.SaveChanges();

То, что я ожидаю получить, это строки base64, которые я могу сохранить в соответствующие поля в базе данных.

То, что я на самом деле получаю, это исключение SQLE, которое говорит:

System.Data.Entity.Validation.DbEntityValidationException: 'Echec de Валидация прав и привилегий. Залить плюс информация, consultez 'EntityValidationErrors'. '

1 Ответ

0 голосов
/ 04 января 2019

Ваша ошибка не связана с кодом, который вы опубликовали. В этом коде я не вижу, что вы сохраняете в базу данных.

Похоже, на вашей Voiture модели есть проверка. Строки, которые вы назначаете для car экземпляра Voiture, вероятно, не проходят проверку.

Возможно, я ошибаюсь, но похоже, что вы публикуете изображения, превращаете их в строки base64 и возвращаете их обратно клиенту или представлению.

Я что-то пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...