Как отрендерить флэш (flash) из базы данных в ASP.NET

Источник: progblog

Допустим, у нас есть информация для вывода на нашем сайте, причём в формате flash. Задача: написать Handler для вывода флэш-обьектов из базы данных, причём должно работать во всех браузерах.

Решение в виде FlashHandler.ashx:

  1. <%@ WebHandler Language="C#" Class="flash_view" %>   
  2.   
  3. using System;   
  4. using System.Web;   
  5. using System.Linq;   
  6.   
  7. /// <summary>   
  8. /// Хэндлер показа флэш-объекта   
  9. /// </summary>   
  10. public class flash_view : IHttpHandler {   
  11.   
  12.     public void ProcessRequest(HttpContext context) {   
  13.         using (var dc = new SiteDataContext()) {   
  14.   
  15.             var item = dc.FlashObjects.First(i => i.FlashObjectId == Convert.ToInt32(context.Request.QueryString["FlashObjectId"]));   
  16.   
  17.             if (item.Content.Length == 0)   
  18.                 return;   
  19.   
  20.             context.Response.ContentType = "application/x-shockwave-flash";   
  21.                
  22.             context.Response.AddHeader("Accept-Ranges", "bytes");   
  23.   
  24.             using (System.IO.MemoryStream ms = new System.IO.MemoryStream(item.Content.ToArray()))   
  25.             {   
  26.                context.Response.BinaryWrite(ms.ToArray());   
  27.             }   
  28.             context.Response.End();   
  29.         }   
  30.     }   
  31.   
  32.     public bool IsReusable {   
  33.         get {   
  34.             return true;   
  35.         }   
  36.     }   
  37.   
  38. }  
<%@ WebHandler Language="C#" Class="flash_view" %>

using System;
using System.Web;
using System.Linq;

/// <summary>
/// Хэндлер показа флэш-объекта
/// </summary>
public class flash_view : IHttpHandler {

    public void ProcessRequest(HttpContext context) {
        using (var dc = new SiteDataContext()) {

            var item = dc.FlashObjects.First(i => i.FlashObjectId == Convert.ToInt32(context.Request.QueryString["FlashObjectId"]));

            if (item.Content.Length == 0)
                return;

            context.Response.ContentType = "application/x-shockwave-flash";
            
            context.Response.AddHeader("Accept-Ranges", "bytes");

            using (System.IO.MemoryStream ms = new System.IO.MemoryStream(item.Content.ToArray()))
            {
               context.Response.BinaryWrite(ms.ToArray());
            }
            context.Response.End();
        }
    }

    public bool IsReusable {
        get {
            return true;
        }
    }

}

Важно! Для того, чтобы данный хэндлер корректно отрабатывал в любимом браузере IE (6,7,8) необходимо в урл вписывать ".swf" - иначе он не понимает что в контенте флэш-объект :)

Удачного вам программирования, следующая статья будет о возможности контроля кликов по флэш объектам.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=22684