[ASP.NET] HttpHandler With Flash

因為想要顯示的Flash(swf)檔案實際存放的位置沒辦法用網址指定,所以只能寫串流出去,但是直接寫串流沒辦法讓瀏覽器直接顯示,所以只好在網頁中先內嵌object,再利用Handler來處理。

因為想要顯示的Flash(swf)檔案實際存放的位置沒辦法用網址指定,所以只能寫串流出去,但是直接寫串流沒辦法讓瀏覽器直接顯示,所以只好在網頁中先內嵌object,再利用Handler來處理。

 

<div>
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="912" height="650" id="movie_name" align="middle">
        <param name="movie" value="Reader.ashx?<%=Request.QueryString %>" />
        <!--[if !IE]>-->
        <object type="application/x-shockwave-flash" data="Reader.ashx?<%=Request.QueryString %>" id="movie_name2" width="912" height="650">
            <param name="movie" value="Reader.ashx?<%=Request.QueryString %>" />
            <!--<![endif]-->
            <a href="http://www.adobe.com/go/getflash">
                <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
            </a>
            <!--[if !IE]>-->
        </object>
        <!--<![endif]-->
    </object>
</div>

 

Handler這邊,為了讓瀏覽器不要進行快取,所以增加了停止快取的設定:

private static void output(HttpContext context, string swfPath)
{
    context.Response.Clear();
    context.Response.Cache.SetValidUntilExpires(false);
    context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    context.Response.Cache.SetNoStore();
    context.Response.ContentType = "application/x-shockwave-flash";
    context.Response.HeaderEncoding = Encoding.GetEncoding("utf-8");
    context.Response.ContentEncoding = Encoding.GetEncoding("utf-8");
    context.Response.AddHeader("content-disposition", ";filename=" + HttpUtility.UrlEncode(Path.GetFileName(swfPath)));
    context.Response.WriteFile(swfPath);
    context.Response.End();
}

註:之前呆呆的加了attachment,結果Flash一直顯示不出來…。所以要特別注意Header不能亂加XD

 

Dotblogs 的標籤: ,,