Відображення картинки з бд безпосередньо - створення свого httphandler

Але навіщо використовувати додатковий файл для отримання картинки, якщо в ASP.NET є таке чудово засіб обробки запитів, як HttpHandler. )

Що ж таке HttpHandler і на що він схожий? Фактично HttpHandler це той же ISAPI фільтр, що обробляє http запити. Будь-який запит, що приходить на ASP.NET веб додаток, в результаті буде оброблений одним з HttpHandlerов, і від цього нікуди не дітися. Деякі HttpHandlerи передають виконання запиту інших класів (наприклад класу викликається сторінки), інші ж самі обробляють запит і повертають результат клієнту. Але це в даному випадку не має значення. Важливим є те, що Microsoft надала можливість розробникам з легкістю писати свої HttpHandlerи.

Продовжимо розгляд нашої задачі - одержання зображення з бази даних. Нехай в БД є таблиця Picture наступної структури:

Ми хочемо отримувати з цієї БД зображення по його унікальним ідентифікатором (значенням поля id). При це ми не хочемо створювати ніяких додаткових файлів. І, як я вже згадував, цього і не потрібно - все може бути зроблено за допомогою HttpHandler.

Для того, щоб клас міг бути зареєстрований як HttpHandler, необхідно всього лише реалізувати в ньому інтерфейс System.Web.IHttpHandler, що має одне get властивість і один метод. Спробуємо зробити це :)

Почнемо з імені класу:

Потім реалізуємо властивість IsReusable, яке вказує на те, чи може наш клас викликатися без повторної ініціалізації

І, нарешті, перейдемо до найцікавішого - реалізації методу ProcessRequest, що виконує реальну обробку запиту. Нагадаю, що ми хочемо за унікальним ідентифікатором картинки повернути саму картинку:

Отримуємо посилання на об'єкти Request і Response запиту.

Отримуємо значення унікального ідентифікатора картинки

Створюємо підключення до БД і отримуємо картинку по її унікальним ідентифікатором

Я тут не робив перевірки на існування запису, але в реальному житті це звичайно ж не завадить :)

Встановлюємо правильний ContentType

І пишемо вміст картинки клієнту.

Ось і все - наш HttpHandler створений. Залишилося підключити його до веб додатком і він буде готовий до роботи.

Для підключення HttpHandlerов використовується секція файлу конфігурації web.config. Формат рядка підключення HttpHandlerа наступний:

Спираючись на це підключимо створений нами HttpHandler до веб додатком. Перепишемо скомпільовану збірку в підкаталог bin веб додатки і додамо в файл конфігурації в розділ наступний рядок:

Людською мовою цей рядок можна пояснити так: при запиті файлу photo.aspx обробляти це запит HttpHandlerом PictureHandler.PictureHandler, що знаходяться в збірці PictureHandler. Зверніть увагу - реально файлу photo.aspx в веб додатку не існує, але якщо ви спробуєте запросити файл photo.aspx з правильним унікальним ідентифікатором картинки - вам буде повернута ця картинка.

От і все. Тепер в будь-якому місці веб додатки для виведення картинки з id = 10 можна використовувати

.

PS. Не намагайтеся використовуючи наведений вище приклад отримати картинки з таблиці Employees бази Northwind - все одно нічого не вийде :) В цій таблиці зберігаються не картинки, а OLE об'єкти.

Схожі статті