我将视频数据存储在数据库中,并希望在我的页面中播放。我像这样制作自定义处理程序(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>
但它没有发挥任何作用。任何人都可以解释一下原因吗?
答案 0 :(得分:3)
主要错误是你没有设置ContentType
for the video而你离开了浏览器来决定它是什么。将其设置为:
context.Response.ContentType = "video/mpeg";
"Content-Disposition"
也用于下载文件,也删除
清楚在这里没有意义,删除它
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();
}