我使用以下代码在aspx页面上流式传输视频并向用户显示。
但是在运行代码时出现以下错误:
CS0029:无法隐式转换类型' System.IO.Stream'到' Stream'
请你帮我解释一下这段代码的错误吗?
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Web;
public partial class Stream : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Stream stream = null;
int bytesToRead = 10000;
byte[] buffer = new Byte[bytesToRead];
try
{
HttpWebRequest fileReq = (HttpWebRequest)HttpWebRequest.Create("the url");
HttpWebResponse fileResp = (HttpWebResponse)fileReq.GetResponse();
if (fileReq.ContentLength > 0)
fileResp.ContentLength = fileReq.ContentLength;
stream = fileResp.GetResponseStream();
var resp = HttpContext.Current.Response;
resp.ContentType = "application/octet-stream";
resp.AddHeader("Content-Disposition", "attachment; filename=\"" + "ali" + "\"");
resp.AddHeader("Content-Length", fileResp.ContentLength.ToString());
int length;
do
{
if (resp.IsClientConnected)
{
length = stream.Read(buffer, 0, bytesToRead);
resp.OutputStream.Write(buffer, 0, length);
resp.Flush();
buffer = new Byte[bytesToRead];
}
else
{
length = -1;
}
} while (length > 0);
}
finally
{
if (stream != null)
{
stream.Close();
}
}
}
}
答案 0 :(得分:0)
stream = fileResp.GetResponseStream();是错的
该功能的声明如下 公共覆盖Stream GetResponseStream()
https://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.getresponsestream(v=vs.110).aspx
您可以将代码更改为(NetworkStream)fileResp.GetResponseStream();
为了更详细地解释它,Stream是一个抽象类,它应该从它的子类初始化,在你的情况下,你提供一个抽象类,它违反了这个规则。
答案 1 :(得分:0)
您的班级名称与.GetResponseStream()
返回的班级名称相同。当您执行Stream stream
时,它会将stream
定义为对象,或将您的班级定义为System.IO.Stream
。你有几个选择。一个是你可以声明如下:
System.IO.Stream stream = null;
另一个是将它自己定义为命名空间之外的using语句
using IOStream = System.IO.Stream;
然后您可以在任何地方使用IOStream
,如下所示:
IOStream stream = null;
答案 2 :(得分:0)
stream = fileResp.GetResponseStream();
我相信这行正在抛出编译错误。 您的流referance类型为Class stream 。请使用
System.IO.Stream stream = null;
初始化时的.. :)