在C#代理中从Web服务器读取图像

Xet*_*ius 4 c# image http stream

我正在尝试编写一个代理,它从一个服务器读取一个图像并将其返回给提供的HttpContext,但我只是回到了字符流.

我正在尝试以下方法:

WebRequest req = WebRequest.Create(image);
WebResponse resp = req.GetResponse();
Stream stream = resp.GetResponseStream();
StreamReader sr = new StreamReader(stream);
StreamWriter sw = new StreamWriter (context.Response.OutputStream);

sw.Write (sr.ReadToEnd());
Run Code Online (Sandbox Code Playgroud)

但正如我之前提到的,这只是回应文本.

我该怎么说它是一张图片?

编辑:我正在img标记的source属性的网页中访问它.将内容类型设置为application/octet-stream提示保存文件并将其设置为image/jpeg只响应文件名.我想要的是调用页面返回和显示的图像.

Joh*_*ers 14

既然你正在使用二进制文件,你不想使用StreamReader,这是一个文本阅读器!

现在,假设您已正确设置内容类型,您应该只使用响应流:

const int BUFFER_SIZE = 1024 * 1024;

var req = WebRequest.Create(imageUrl);
using (var resp = req.GetResponse())
{
    using (var stream = resp.GetResponseStream())
    {
        var bytes = new byte[BUFFER_SIZE];
        while (true)
        {
            var n = stream.Read(bytes, 0, BUFFER_SIZE);
            if (n == 0)
            {
                break;
            }
            context.Response.OutputStream.Write(bytes, 0, n);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)