(1)需求:实现页面内的视频播放功能。效果如下图所示:
(2)解决过程:在网上查到需要需要设置Response中headers的Content-Disposition为inline(可以页面打开文件)。注:这个Content-Disposition一共有两个值,另外一个是attachment,效果是打开下载框下载文件。
在本次解决需求过程中,由于之前已经有写好的方法,本来想着只需要将Content-Disposition设置为inline就可以了,但是这个属性却一直不能设置成功。后来尝试了各种方法,虽然Content-Disposition属性设置成功了,结果还是下载,或者不能页内播放。后来在各种胡乱尝试的过程中,终于实现了。
(3)结果总结:之前说过,是在原有的方法上改的,原有的方法中用的是图中下面的那个接口:File(byte[] fileContents, string contentType, string fileDownloadName); 其中第三个参数含义是下载文件的名称。之前各种尝试不能实现页内播放,原因就是这个这个方法是专门用来下载使用的。
后来在偶然的情况下,我输入的fileDownloadName为空,结果实现了页内播放,这是因为改接口有另外一个重载方法,就是图中上面那个接口File(byte[] fileContents, string contentType);在fileDownloadName为空的情况下,自动调用File(byte[] fileContents, string contentType),之后再单独调用这个接口的情况下,效果是一样的。
总而言之,使用File(byte[] fileContents, string contentType)实现页内播放。
(4)备注:在本文中,fileContents 是读取后台视频生成MemoryStream,按照以下步骤转换
byte[] fileByte = new byte[fileMemoryStream.Length];
fileMemoryStream.Read(fileByte, 0, fileByte.Length);
fileMemoryStream.Flush();
fileMemoryStream.Close();
contentType 是传输文件的类型,本文设置为"video/mp4"。
另:本文的需求也可以通过文件流实现,如下图所示的接口,两个接口的区别应该是和本文介绍的一样