3

我将视频数据存储在数据库中,并希望在我的页面中播放。我像这样制作自定义处理程序(FileHandler.ashx)

 public void ProcessRequest(HttpContext context)
        {
            int id;
            if (context.Request.QueryString["FileId"] == null || !Int32.TryParse(context.Request.QueryString["FileId"], out id))
                return;
            var file = lnxFile.Get(id);
            string fileName = file.Name + file.Extension;
            context.Response.Clear();
            context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
            context.Response.BinaryWrite(file.Data);
            context.Response.End();
            context.Response.Flush();
        }

并像这样使用了html5的视频标签

<video id="jwplayer_placeholder" width="320" height="240" controls> 
    <source src="<%= "/CMS/Common/FileHandler.ashx?FileId=" + id %>" type="video/mp4">  
</video>

但它什么也没玩。谁能解释一下原因?

4

1 回答 1

3

主要错误是您没有ContentType 为视频设置,您离开浏览器来决定它是什么。将其设置为:

context.Response.ContentType = "video/mpeg";

"Content-Disposition"用于下载文件,也将其删除

clear 在这里没有意义,去掉

context.Response.Clear();

并设置Buffer=off,因为您需要将其直接发送到浏览器。

这个序列没有意义,只保留Flush.

   context.Response.End();
    context.Response.Flush();

所以最终的代码将是:

 public void ProcessRequest(HttpContext context)
{
    int id;
    if (context.Request.QueryString["FileId"] == null || !Int32.TryParse(context.Request.QueryString["FileId"], out id))
        return;
    var file = lnxFile.Get(id);

    context.Response.Buffer = false;
    context.Response.ContentType = "video/mpeg";    
    context.Response.BinaryWrite(file.Data);    
    context.Response.Flush();
}
于 2013-06-01T19:18:59.927 回答