开发者

How to send an image to a browser

开发者 https://www.devze.com 2023-03-28 22:28 出处:网络
I am building a simplified web server, I was able to handle sending the HTML pages properly but when I get a request for an image, my code doesn\'t give the browser the image

I am building a simplified web server, I was able to handle sending the HTML pages properly

but when I get a request for an image, my code doesn't give the browser the image

FileStream fstream = new FileStream(tempSplitArray[1],FileMode.Open,FileAccess.Read);
//The tempSplitArray //recieves the request from the browser
byte[] ar = new byte[(long)fstream.Length];
for (int i = 0; i < ar.Length; i++)
{
    ar[i] = (byte)fstream.ReadByte();
}
string byteLine = "Content-Type: image/JPEG\n" + BitConverter.ToString(ar);
sw.WriteLine(byteLine);//This is the network stream writer
sw.Fl开发者_C百科ush();
fstream.Close();

Excuse my ignorance and if there are any questions, or my question is not clear enough, let me know.


Basically you want your response to look like:

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: *length of image*

Binary Image Data goes here

I'm assuming sw is a StreamWriter, but you need to write the raw bytes of the image.

So how about:

byte[] ar;
using(FileStream fstream = new FileStream(tempSplitArray[1],FileMode.Open,FileAccess.Read);)
{
    //The tempSplitArray //recieves the request from the browser
    ar = new byte[(long)fstream.Length];

    fstream.read(ar, 0, fstream.Length);
}

sw.WriteLine("Content-Type: image/jpeg");
sw.WriteLine("Content-Length: {0}", ar.Length); //Let's 
sw.WriteLine(); 
sw.BaseStream.Write(ar, 0, ar.Length);

It really helps to use a tool like fiddler to view the communications between browsers and a (real) webserver and try to replicate that.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号