无法隐式转换类型System.IO.Stream'到' Stream'

时间:2018-01-27 05:33:05

标签: c# asp.net io stream

我使用以下代码在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();
            }
        }

    }
}

3 个答案:

答案 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; 
初始化时的

.. :)