Member 12973253 Ответов: 2

Отображение изображения байтового массива в ASP.NET вид бритвы.


я хочу знать, как я могу отобразить свое изображение в базе данных sql server в asp.net вид бритвы. я уже сделал контроллеры спасательных действий. пожалуйста, кто-нибудь, помогите мне. я не создавал никаких действий контроллера для рендеринга изображения

Что я уже пробовал:

ниже приведено мое действие контроллера для сохранения байта изображения



public ActionResult Create()
{
Видовая сумка.Owner_ID = новый список выбора (db. Owners, "OwnerID", " UserName");
возвращение смотреть();
}

// Пост: /объект/создать
// Для защиты от атак перенапряжения, пожалуйста, включите конкретные свойства, к которым вы хотите привязаться, например
// Подробнее см. http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]

public ActionResult Create(Facility model, HttpPostedFileBase image1 )
{
var db = new eReservatorEntities7();

if (image1 != null)
{
модель.Image = новый байт[image1.ContentLength];
рис1.Класса InputStream.Читают(модель.Изображение, 0, изображение 1.ContentLength);

}

БД.объекты.Добавить (модель);
дБ.Метод SaveChanges();
обратный вид(модель);
}


}
public ActionResult Create()
        {
            ViewBag.Owner_ID = new SelectList(db.Owners, "OwnerID", "UserName");
            return View();
        }

        // POST: /Facility/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        
        public ActionResult Create(Facility model, HttpPostedFileBase image1 )
        {
            var db = new eReservatorEntities7();

            if (image1 != null)
            {
                model.Image = new byte[image1.ContentLength];
                image1.InputStream.Read(model.Image, 0, image1.ContentLength);

            }
            
                db.Facilities.Add(model);
                db.SaveChanges();
                return View(model);
            }

            
        }

2 Ответов

Рейтинг:
0

Dave Kreskowiak

Код представления Razor просто генерирует HTML. Вот и все, больше ничего. Изображения не являются HTML-кодом, поэтому код Razor не может генерировать HTML-код для изображения. Однако он может сгенерировать HTML-тег IMG, чтобы получить изображение.

Итак, как HTML-страница получает изображение? Он должен сделать второй запрос к серверу, будь то прямой запрос на файл на сервере или запрос к контроллеру, который вы пишете, используя какой-то идентификатор, который вы предоставили коду Razor для генерации тега HTML IMG. Сервер либо вернет файл, указанный в теге, либо должен сделать все возможное, чтобы получить данные изображения и вернуть их клиенту в потоке байтов.


Рейтинг:
0

F-ES Sitecore

Вам нужно действие, которое возвращает файл, и вы устанавливаете src тега img В качестве этого действия. Для моей базы данных у меня есть

Идентификатором, именем, МИМ, она

поэтому я прочитал их список в своем индексном методе

public class GalleryModel
{
    public int ID { get; set; }
    public string Filename { get; set; }
}


public ActionResult Index()
{
    List<GalleryModel> model = new List<GalleryModel>();

    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString))
    {
        SqlCommand com = new SqlCommand();
        com.Connection = con;
        com.CommandText = "select ID, Filename from Gallery";
        con.Open();
        SqlDataReader r = com.ExecuteReader();
        while (r.Read())
        {
            model.Add(new GalleryModel { ID = (int)r["ID"], Filename = (string)r["Filename"] });
        }
    }

    return View(model);
}


Вид такой

@model List<GalleryModel>

<table>
@foreach (var gallery in Model)
{
    <tr>
        <td>
            @gallery.Filename
        </td>
        <td>
            <img src="@Url.Action("GetImage", "Gallery", new {id = gallery.ID})" />
        </td>
    </tr>
}
</table>


Теперь нам нужно реализовать действие GetImage на контроллере галереи

[HttpGet]
public ActionResult GetImage(int id)
{
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString))
    {
        SqlCommand com = new SqlCommand();
        com.Connection = con;
        com.CommandText = "select Filename, MIME, ImageData from Gallery where ID = @id";
        com.Parameters.AddWithValue("@id", id);
        con.Open();
        SqlDataReader r = com.ExecuteReader();
        if (r.Read())
        {
            return File((byte[])r["ImageData"], (string)r["MIME"], (string)r["Filename"]);
        }
    }

    return new EmptyResult();
}


Я использую ado.net, но вы можете подключить свой код Entity Framework, общий принцип тот же.