禁用Swf文件的缓存

时间:2012-11-05 20:15:09

标签: c#

是否可以禁用通过Windows窗体应用程序中的axShockwaveFlash对象加载的swf文件的缓存?

必须使用WindowsBrowser对象来获得该结果听起来有点过分。

PS:是的,我已经尝试在Internet Explorer中禁用整个缓存(强制浏览器每次打开它时加载一个页面),但不知何故flash似乎忽略了这一点。

3 个答案:

答案 0 :(得分:0)

外面的闪光灯

public override void ExecuteResult(ControllerContext context)  
{  
    DateTime dt = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0));  

    context.HttpContext.Response.Clear();  

    FileStream fs = System.IO.File.OpenRead("path_to_swf_file");  
    byte[] BannerData = new byte[fs.Length];  
    fs.Read(BannerData, 0, BannerData.Length);  

    context.HttpContext.Response.ExpiresAbsolute = dt;  
    context.HttpContext.Response.CacheControl = "no-cache";  
    context.HttpContext.Response.AddHeader("Pragma", "no-cache");  
    context.HttpContext.Response.Charset = "utf-8";  
    context.HttpContext.Response.ContentEncoding = System.Text.Encoding.UTF8;  
    context.HttpContext.Response.Expires = -1;  
    context.HttpContext.Response.CacheControl = "no-cache, no-store, must-revalidate";  
    context.HttpContext.Response.ContentType = "application/x-shockwave-flash";  
    context.HttpContext.Response.AppendHeader("Content-Disposition", "attachment; filename=...");  
    context.HttpContext.Response.BinaryWrite(BannerData);  

    fs.Close();  

    context.HttpContext.Response.End();  
} 

var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest(whatever url);
request.requestHeaders.push(new URLRequestHeader("pragma", "no-cache"));
request.requestHeaders.push(new URLRequestHeader("Expires", "Thu, 01 Jan 1970 00:00:00 GMT, -1"));
request.requestHeaders.push(new URLRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate"));
loader.load(request);

答案 1 :(得分:0)

您始终可以将当前时间戳(以毫秒为单位)附加到SWF文件的网址。

答案 2 :(得分:0)

我假设你在axShockwave控件中指定了一个HTTP URI。

Shockwave Flash播放器可以在完全下载之前播放SWF文件,最简单的方法是在控件中指定网络地址,但正如您所说,您正在遇到缓存失效问题。

如果SWF文件不是太大(即在几秒钟内完全下载),那么我将使用HttpWebRequest或WebClient下载它,将其保存到磁盘上的临时文件中,然后将其加载到播放器中本地路径。请注意,如果SWF依赖于任何域安全选项,则会破坏SWF(Flash播放器会限制某些操作,除非SWF源自与请求的操作相同的域,如果SWF在本地运行,因为没有域,这显然会中断)。

我能想到的唯一选择(因为我自2003年以来没有使用过Flash ActiveX控件,是的,9年前)是删除,处理,然后重新创建控件 - 但我不知道是否有幕后发生任何持久性缓存。