因為想要顯示的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