无法在带有 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 闪存文件的一些问题。 对于这种类型的文件,我将&lt;object&gt; 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 文件的主要内容,如果未能解决你的问题,请参考以下文章

apprequest 无法显示在用户页面上

HttpHandler与HttpModule及实现文件下载

httphandler和httpmodule的区别

无法将 HttpHandler 映射到“路径/*”通配符映射

带有图像的 flexbox 在 Safari 中无法正确查看

web.config 的 httpHandlers 部分出现内部服务器错误