【问题标题】:Content Disposition Problem内容处置问题
【发布时间】:2010-12-31 09:10:53
【问题描述】:

我有一个存储媒体文件 (.avi f.e.) 的 sql 数据库。我将 aspx 页面 (VIDEOPAGE) 中的视频提取为字节数组,并将其发送到另一个调用此页面的网页(必须是这种方式),并使用呈现 Windows 媒体播放器控件的 html 对象标记显示视频。

我使用的语法是:

Response.ContentType = contentType;
Response.AddHeader("Content-Disposition", string.Format("attachment; filename ={0}",myAttachment.FileName));
Response.OutputStream.Write(myAttachment.Attachment, 0, myAttachment.Attachment.Length)

这适用于所有 mpeg 和 wmv 文件,但在 avi 上失败! contentType 变量包含正确的内容类型(我知道这是因为以下原因:

当我不使用对象标签而只是从数据库中加载带有 avi 文件和上述语法的 VIDEOPAGE 页面时,它会显示一个“你要打开..”对话框,我点击确定,然后视频确实以 WMP 格式显示。

我尝试将Content-Disposition 更改为hiddeninline。什么都没有。。

有什么想法吗?

【问题讨论】:

  • 我不认为将整个视频存储在 SQL 数据库中是特别可取的。通常,最好在文件系统上存储视频的路径,而不是在其中包含包含视频数据的大量 BLOB。

标签: c# http content-disposition


【解决方案1】:

首先,如果您只是在网页上嵌入视频,则不需要 Content-Disposition 标头,因此只需删除该行。

其次,您能否告诉我们您为每种视频类型使用了哪些Content-Type 值。

您的浏览器在 Windows Media Player 中打开了视频证明您使用的是正确的类型,因为 Internet Explorer 和其他一些浏览器可以忽略@987654323 @header 并依赖于文件扩展名。因此,您的文件名是 .avi 就足以让 IE 以 WMP 格式播放视频。

【讨论】:

    【解决方案2】:

    确保您已正确设置内容类型并且在文件名中包含众所周知的文件类型后缀(例如、“等等。avi”)。如果浏览器无法识别内容类型或没有为其设置关联,则它们通常会使用文件类型后缀。

    【讨论】:

      【解决方案3】:

      尝试删除Response.AddHeader("Content-Disposition", ... 行。

      【讨论】:

        【解决方案4】:

        Content Disposition 标头应如下所示:

        Content-Disposition: attachment; filename="filename.avi"
        

        也许我误读了您的代码,但它看起来像:

        a) Content-Disposition 和之后没有空格

        b) 您没有引号中的文件名。

        这似乎不太可能,因为您只遇到 AVI 文件的问题,但由于 mpeg 和 wmv 文件更适合操作系统,这可能是巧合,即使它们不应该工作。

        对此进行测试的一种方法是将内容类型更改为诸如“.pdf”之类的中性内容,然后看看会发生什么。

        【讨论】:

        • 是的,你读错了。 Response.AddHeader 不采用完整的标题字符串(“Content-Disposition: attachment;...”),而是两个字符串:标题名称(“Content-Disposition”)和标题值(“attachment;. ..”)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多