Вывод на странице картинки из базы данных
От: Кочевник Казахстан  
Дата: 11.04.03 04:01
Оценка: 10 (1)
Здравствуйте
Есть одна непонятная проблема. На страницу выводим картинку, которая хранится в БД, поле типа image.
Суть проблемы:
Нетскейп выводит картинку, а Экплорер нет, не зависает, а ждет бесконечно долго чего-то от сервера.
Ставил брэкпойнты, все нормально — до Response.End() и con.Close() сервер проходит.
Причем при просмотре на той машине (то есть если набирать localhost/mysite/myapp), где работает IIS проблем нет, и Нетскейп и Экплорер работают. Проблема на зависит от версии Экплорер (и 5 и 6)
Есть подозрения, что Экплорер не "врубается", что вся картинка уже у него и надо бы показать ее. Как ему это обяснить?
Может кто сталкивался с такой проблемой, буду благодарен за совет

Так выглядит код с картинкой
Image1.ImageUrl="planirovka.aspx?reid=" + strReID;


а тут код planirovka.aspx
    public class Planirovka : System.Web.UI.Page
    {
        private void Page_Load(object sender, System.EventArgs e)
        {
            if( Request.QueryString["reid"] != null )
            {
                DisplayImage(Request.QueryString["reid"]);
            }
        }
        private void DisplayImage(string strReId)
        {
            SqlConnection con = new SqlConnection(DBProvider.ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "select planirovka from tblRealEstate where RealEstateID=" + strReId;
            cmd.Connection = con;
            try 
            {
                con.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                Response.Clear();
                Response.ContentType = "image/jpeg";
                int bufferSize=1000;
                byte[] outbyte = new byte[bufferSize];
                long startIndex = 0;
                long retval ;
                BinaryWriter bw = new BinaryWriter(Response.OutputStream);
                while (dr.Read())
                {
                    retval = dr.GetBytes(0, startIndex, outbyte, 0, bufferSize);
                    while (retval == bufferSize)
                    {
                        bw.Write(outbyte);
                        //bw.Flush();
                        startIndex+= bufferSize;
                        retval = dr.GetBytes(0, startIndex, outbyte, 0, bufferSize);
                    }
                    bw.Write(outbyte);
                    //bw.Flush();
                    bw.Close();
                }
                Response.End();
                dr.Close(); 
            }
            catch (SqlException SqlEx)
            {
                Server.Transfer("Error.aspx");
            }
            finally
            {
                con.Close();

            }
        }

    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.