Але навіщо використовувати додатковий файл для отримання картинки, якщо в 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ов використовується секція
Спираючись на це підключимо створений нами HttpHandler до веб додатком. Перепишемо скомпільовану збірку в підкаталог bin веб додатки і додамо в файл конфігурації в розділ
Людською мовою цей рядок можна пояснити так: при запиті файлу photo.aspx обробляти це запит HttpHandlerом PictureHandler.PictureHandler, що знаходяться в збірці PictureHandler. Зверніть увагу - реально файлу photo.aspx в веб додатку не існує, але якщо ви спробуєте запросити файл photo.aspx з правильним унікальним ідентифікатором картинки - вам буде повернута ця картинка.
От і все. Тепер в будь-якому місці веб додатки для виведення картинки з id = 10 можна використовувати
.PS. Не намагайтеся використовуючи наведений вище приклад отримати картинки з таблиці Employees бази Northwind - все одно нічого не вийде :) В цій таблиці зберігаються не картинки, а OLE об'єкти.