无法在带有 httpHandler 的页面上显示 .swf 文件
Posted
技术标签:
【中文标题】无法在带有 httpHandler 的页面上显示 .swf 文件【英文标题】:Can't display .swf files on a page with httpHandler 【发布时间】:2012-12-06 20:31:51 【问题描述】:请阅读最后的编辑。
我有一个页面,我应该在其中显示一些媒体数据。 为此,我使用 html 标签,如下所示:
<object type="video/x-ms-wmv" >
<param name="src" value="some_media_url" />
<param name="AutoSize" value="true">
<param name="ShowDisplay" value="false">
<param name="AutoStart" value="false">
<param name="StretchToFit" value="true">
<param name="bgcolor" value="#ffffff" />
</object>
就我而言,我应该通过一些 MediaHandler.ashx http 处理程序从 SQL 服务器获取媒体数据。
当我获得音频(.mp3,.wma)或视频(.flv,.mp4)流时,这可以正常工作。
但我遇到了 .swf 闪存文件的一些问题。
对于这种类型的文件,我将<object> type
更改为“application/x-shockwave-flash”。在这种情况下,当我使用一些远程路径时,例如http://www.tizag.com/pics/example.swf,它可以正常工作:
<object type="application/x-shockwave-flash" >
<param name="src" value='http://www.tizag.com/pics/example.swf' />
<param name="AutoSize" value="true">
<param name="ShowDisplay" value="false">
<param name="AutoStart" value="false">
<param name="StretchToFit" value="true">
</object>
但是,它不适用于我的处理程序。它不适用于本地路径,例如“c:\videos\example.swf”
有什么想法吗?
编辑:实际上媒体的 src 看起来像这样:
<object type="video/x-ms-wmv" >
<param name="src" value="http://localhost:11111/MediaHandler.ashx?Id=1111" />
<param name="AutoSize" value="true">
<param name="ShowDisplay" value="false">
<param name="AutoStart" value="false">
<param name="StretchToFit" value="true">
<param name="bgcolor" value="#ffffff" />
</object>
编辑:
如果我直接引用现有文件,这可以正常工作:
<object type="application/x-shockwave-flash" >
<param name="src" value="/videos/ETFflash1016.swf" />
<param name="AutoSize" value="true">
<param name="ShowDisplay" value="false">
<param name="AutoStart" value="true">
<param name="StretchToFit" value="true">
</object>
但是当我使用 httpHandler 从数据库获取文件时:
<object type="application/x-shockwave-flash" >
<param name="src" value="http://localhost:57031/MediaHandler.ashx?Id=512429" />
<param name="AutoSize" value="true">
<param name="ShowDisplay" value="false">
<param name="AutoStart" value="true">
<param name="StretchToFit" value="true">
</object>
不显示闪光灯。
我已经比较了这些情况的输出 html,它们在两种情况下都是相同的(除了 src 参数值)。 Fiddler 对 .swf 文件的请求显示相同的结果,并且浏览器显示(例如在 IE 开发工具的 Netwok 选项卡中)在这两种情况下文件已下载到客户端。 但是在处理程序的情况下,没有显示 flash。
【问题讨论】:
如果 swf 在 localhost 中,为什么要使用绝对位置而不是简单的相对位置?唯一的“文件夹/file.swf”应该可以工作。如果您看不到它,请检查文件本身的权限。如果您让我们知道如何通过网络访问文件以便在 jsfiddle 中运行测试,这将很有用。谢谢。 【参考方案1】:Fiddler 对 .swf 文件的两个请求显示相同的结果
在 Fiddler 响应标头中,本地文件和 ASHX 处理程序是否返回相同的 Content-Type: application/x-shockwave-flash
?
【讨论】:
是的,不仅是“Content-Type”,而且所有响应头参数都是一样的。【参考方案2】:试试这个:
<object type="application/x-shockwave-flash" data="file.swf" style="width:640px;height:480px;margin:10px 36px;">
<param name="movie" value="file.swf" />
<param name="AutoSize" value="true">
<param name="ShowDisplay" value="false">
<param name="AutoStart" value="false">
<param name="StretchToFit" value="true">
<param name="bgcolor" value="#ffffff" />
</object>
对我有用
【讨论】:
感谢您的回复。你的代码和我的一样工作。它不适用于 MediaHandler 返回(写入响应)的 .swf 数据。 感谢您的链接,但它再次不适用于 httpHandler :(【参考方案3】:我已经解决了!
在处理程序中,我将 Response Header 的参数设置为与直接引用现有文件的情况相同的值。
现在,我刚刚删除了所有这些值,它可以工作了! 我仍然不明白为什么,但它有效:)
【讨论】:
你能分享完整的代码吗?我遇到了同样的问题,我也想要来自 http 处理程序的 swf 源,请共享此处理程序的端代码和客户端以上是关于无法在带有 httpHandler 的页面上显示 .swf 文件的主要内容,如果未能解决你的问题,请参考以下文章
无法将 HttpHandler 映射到“路径/*”通配符映射