Не удалось загрузить изображение ресурса после создания на странице индекса - PullRequest
0 голосов
/ 28 февраля 2019

Здравствуйте. Я пытаюсь добавить изображение в свою базу данных из локальной папки и успешно работает, но сохраняется с путем и на not displaying нет изображения на странице индекса, но created value path в базе данных
У меня есть этоошибка:

GET http://localhost:57079/'~/Content/img/Asp.net.svg.png'

Это способ создания:

public ActionResult Create( Article article,HttpPostedFileBase postedFile)
    {

        try
        {
            db = new IdentityDBEntities2();

            if (ModelState.IsValid)
            {
                if (postedFile != null)
                {

                    article.image = Convert.ToString(postedFile.ContentLength);
                    postedFile.InputStream.Read(System.Text.Encoding.Unicode.GetBytes(article.image), 0, postedFile.ContentLength);
                    string fileName = System.IO.Path.GetFileName(postedFile.FileName);
                    string FilePath = "~/Content/img/" + fileName;
                    postedFile.SaveAs(Server.MapPath(FilePath));
                }

                article.UserId = System.Web.HttpContext.Current.User.Identity.GetUserId();
                article.Idc = Convert.ToInt32(Request["cab"]);
                db.Articles.Add(article);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(article);
        }
        catch(Exception e) { Response.Write(e.Message); }
        return View();
    }

Спасибо.

1 Ответ

0 голосов
/ 28 февраля 2019

Изображение сохраняется как байтовый массив в базе данных.Так что ваш звонок

article.image = Convert.ToString(postedFile.ContentLength);

не имеет смысла, если вы хотите сохранить реальное изображение.Вам нужно сделать что-то вроде этого:

var ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); //Specify format here; (image is of type System.Drawing.Image)
article.image = ms.ToArray();

Ваше свойство изображения должно иметь тип byte[], а столбец базовой базы данных должен быть VARBINARY.

РЕДАКТИРОВАТЬ: Вы получаете ошибку, потому что image должен быть типа System.Drawing.Image, как указано в комментариях.Если вы не можете использовать это (или не хотите), вам нужно извлечь массив байтов из 'HttpPostedFileBase' следующим образом:

var ms = new MemoryStream();
postedFile.InputStream.CopyTo(ms); 
article.image = ms.ToArray(); 

Когда вы все это сделаете, вы можете отобразить изображение наВаше представление выглядит так:

  1. Создайте новое действие, которое возвращает изображение для каждой статьи

    public ActionResult GetImage(int id) { var article = db.Articles.First(i => i.Id == id); return File(article.image, "image/png"); //Adjust content type based on image type (jpeg, gif, png, etc.) }

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

    Измените

    `@Html.EditorFor(model => model.image, new {htmlAttributes = new { @class = "form-control" ,@type="file" } }`
    

    на

    `<img src="@Url.Action("Index", "Images", new { id = Model.Id })" />`
    

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

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