none
Вставить своё изображение. RRS feed

  • Вопрос

  • Здравствуйте. Вот код который преобразует картинку перед записью в базу данных:

    if (IsPost)
    {       
            var Images = Request.Files[0];
            byte[] Image;
            if (Path.GetFileName(Images.FileName) != String.Empty)
            {
                var InputStream = Images.InputStream;
                Image bmp = new Bitmap(Images.InputStream);
                Int32
               max_width = 110,
               max_height = 110;
                Size s = bmp.Size;
                if (s.Width > s.Height)
                {
                    s.Width = max_width;
                    s.Height = bmp.Height * max_width / bmp.Width;
                }
                else
                {
                    s.Width = bmp.Width * max_height / bmp.Height;
                    s.Height = max_height;
                }
                Image img = new Bitmap(bmp, s);
                ImageConverter converter = new ImageConverter();
                Image = (Byte[])converter.ConvertTo(img, typeof(Byte[]));
            }
            else
            {
                Image = new byte[0];
            }
    

    Если пользователь не добавит картинку, то в базу пишется пустота.

    Как в код добавить, чтоб если пользователь не добавил картинку, чтоб записалась своя. Допустим из адреса

    "~/Images/Vid.jpg"

    21 ноября 2013 г. 11:05

Ответы

  • Проблему решил так: Вместо var Images = Request.Files[0];
    Добавил следующий код.

    var Files = Request.Files.Count;
    if (Files == 0)
    {
    }
    else
    {
    for (int i = 0; i < Files; i++)
    {
    var Images = Request.Files[i];
    
    Теперь если поле картинки не заполнено, то форма не отправляется.
    • Помечено в качестве ответа Континент 2 декабря 2013 г. 14:37
    2 декабря 2013 г. 14:37

Все ответы

  • А зачем, именно это поведение и есть правильно. Если хотите потом этут картинку отдавать, то проверяйте перед передачей: если картинки нет, передайте вашу по умолчанию. Тогда не придётся дублировать данные.

    Сделаем содержимое сообщества лучше, вместе!

    21 ноября 2013 г. 11:36
    Модератор
  • И как прописать? Что то у меня не выходит. Вот код вывода картинки из базы:

        if (Request["Id"].IsInt()){
           var selectQuery = "SELECT Id, Image FROM Buy WHERE Id = @0";
    
           var Images = db.QuerySingle(selectQuery, Request["Id"].AsInt());
               Response.BinaryWrite((byte[])Images.Image);
    }

    И вывод картинки на страницу:

    <img src="Buy.cshtml?Id=@row.Id"/>

    21 ноября 2013 г. 12:13
  • Дополнение. Данные из базы вывожу так:

    @{ foreach (var row in db.Query(selectQueryString))
    { 
    <div class="ads">
    <div class="ads-name">@row.Name</div>
    <div class="ads-image"><img src="Buy.cshtml?Id=@row.Id"/></div>
    <div class="ads-title">@row.Title</div>
    <div class="ads-text">@row.Text</div>
    <div class="ads-niz">
    <div class="ads-data">@row.Data</div>
    <div class="ads-tel">@row.Tel</div>
    </div>
    </div>
    }
    }
    
    И, как свою картинку ставить?
    22 ноября 2013 г. 8:49
  • Ну и. Всё, что Вы говорили!!!

    22 ноября 2013 г. 18:07
  • Примерно так.

    @ { if(row.Image != null) {<div class="ads-image"><img src="Buy.cshtml?Id=@row.Id"/></div>} else { <div class="ads-image"><img src="Ваш путь к рисунку"/></div> }

    }

    Не знаю точно как там у вас поля называются.


    Сделаем содержимое сообщества лучше, вместе!

    23 ноября 2013 г. 8:19
    Модератор
  • Не работает. Я и хотел делать запись картинки сразу в базу. Так как вывести её не получается. Что можно сделать в данной ситуации?

    24 ноября 2013 г. 16:03
  • Ни чего не получается. На страницу выводится :

    <img src="Buy.cshtml?Id=68"/>

    Где Id это порядковый номер ячейки Id в базе данных. И если при записи картинки в базу данных её не указать, то всё равно на пустое место какие то данные пишутся. Поэтому, если код писать так:

    @
    {
      if(row.Image != null)
      {<div class="ads-image"><img src="Buy.cshtml?Id=@row.Id"/></div>}
    else
    {
      <div class="ads-image"><img src="Ваш путь к рисунку"/></div>
    }
    
    }
    

    то моя картинка не выводится.

    И прописать свою картинку в базу тоже не получается. Вот код:

    if (IsPost)
    {       
            var Images = Request.Files[0];
            byte[] Image;
            if (Path.GetFileName(Images.FileName) != String.Empty)
            {
                var InputStream = Images.InputStream;
                Image bmp = new Bitmap(Images.InputStream);
                Int32
               max_width = 110,
               max_height = 110;
                Size s = bmp.Size;
                if (s.Width > s.Height)
                {
                    s.Width = max_width;
                    s.Height = bmp.Height * max_width / bmp.Width;
                }
                else
                {
                    s.Width = bmp.Width * max_height / bmp.Height;
                    s.Height = max_height;
                }
                Image img = new Bitmap(bmp, s);
                ImageConverter converter = new ImageConverter();
                Image = (Byte[])converter.ConvertTo(img, typeof(Byte[]));
            }
            else
            {
                Image = new byte[0];
            }

    Пишет: Не явное преобразование типа string в byte[] невозможно.

    Замкнутый круг.


    26 ноября 2013 г. 16:44
  • "Не работает. Я и хотел делать запись картинки сразу в базу. Так как вывести её не получается. Что можно сделать в данной ситуации?" - вам не запись надо вставлять, а прямо рисунок.

    @
    {
      Тут у вас может всегда Image не есть null, нужно как то
      проверить наличие или отсутствие картинки.
      if(row.Image != null)
      {<div class="ads-image"><img src="Buy.cshtml?Id=@row.Id"/></div>}
    else
    {
      <div class="ads-image"><img src="/Images/MyImage.jpg"/></div>
    }
    
    }


    Сделаем содержимое сообщества лучше, вместе!

    26 ноября 2013 г. 19:01
    Модератор
  • Так вот рисунок и не получается вставить.

    26 ноября 2013 г. 19:28
  • Вот код вывода картинки из базы:

        if (Request["Id"].IsInt()){
           var selectQuery = "SELECT Id, Image FROM Buy WHERE Id = @0";
    
           var Images = db.QuerySingle(selectQuery, Request["Id"].AsInt());
               Response.BinaryWrite((byte[])Images.Image);
    }

    И вывод картинки на страницу:

    <img src="Buy.cshtml?Id=@row.Id"/>

    Может надо картинку из базы как то по другому выводить.
    27 ноября 2013 г. 10:46
  • Или может в самой базе в ячейке Image разрешить значение NULL ?
    27 ноября 2013 г. 11:16
  • Перестал пытаться вставить свою картинку.

    Решил сделать проверку на отсутствие картинки в form.

    @Html.ValidationMessage("Image", "Вы забыли про картинку", new { @style = "color:red" })

    Если нет ссылки на картинку выходит надпись. Вводишь картинку, нажимаешь разместить. Страница просто перезагружается и всё.

    Как сделать проверку на отсутствие ссылки на картинку?

    28 ноября 2013 г. 14:27
  • Убираю:

    Validation.RequireField("Image");
    

    Соответственно нет проверки, картинка загружается в базу.

    Неужели никто не может помочь?

    Что за ASP ? Полный тупик!!!

    28 ноября 2013 г. 17:58
  • Можем, только вот времени не хватает. "Или может в самой базе в ячейке Image разрешить значение NULL ?" - сделайте её NULL, и реализуйте проверку на NULL при загрузке страницы. Если её нет, вставляйте свою.

    Сделаем содержимое сообщества лучше, вместе!

    29 ноября 2013 г. 11:21
    Модератор
  • Cделайте её NULL, и реализуйте проверку на NULL при загрузке страницы. Если её нет, вставляйте свою.-

    Не помогло.

    29 ноября 2013 г. 13:01
  • Вопрос: Неявное преобразование типа "System.String" к типу "System.Byte[]" невозможно.

    А как возможно?

    29 ноября 2013 г. 14:11
  • Проблему решил так: Вместо var Images = Request.Files[0];
    Добавил следующий код.

    var Files = Request.Files.Count;
    if (Files == 0)
    {
    }
    else
    {
    for (int i = 0; i < Files; i++)
    {
    var Images = Request.Files[i];
    
    Теперь если поле картинки не заполнено, то форма не отправляется.
    • Помечено в качестве ответа Континент 2 декабря 2013 г. 14:37
    2 декабря 2013 г. 14:37