Пожалуйста, измените этот код для получения изображения из sqldatabase - PullRequest
0 голосов
/ 10 ноября 2009

Я все еще страдаю от извлечения изображения из базы данных SQL. Это мое окончательное решение для вставки и извлечения изображения из базы данных. Вот весь мой код:
GUI часть:

<div>
    <asp:Label ID="lblImage" runat="server" Text="Image"></asp:Label>
    &nbsp;&nbsp;&nbsp;&nbsp;
    <asp:FileUpload ID="imageUpload" runat="server" />   
    <br />
    <asp:Label ID="lblFilename" runat="server" Text="Filename"></asp:Label>
    <asp:TextBox ID="txtFilename" runat="server"></asp:TextBox>   
    <br />
    <br />
    <asp:Button ID="BtnSave" runat="server" Text="SAVE" onclick="BtnSave_Click" />   
    <br />
    <br />
    <br />
    <asp:Image ID="Image1" runat="server" />  
</div>

И под событием нажатия кнопки я написал следующий код:

protected void BtnSave_Click(object sender, EventArgs e)
{
    string uploadFileName = string.Empty;
    byte[] imageBytes = null;
    if (imageUpload != null && imageUpload.HasFile)
    {
        uploadFileName = imageUpload.FileName;
        imageBytes = imageUpload.FileBytes;
    }
    string str = ConfigurationManager.ConnectionStrings["ImageConnectionString"].ConnectionString;
    SqlConnection con = new SqlConnection(str);
    SqlCommand com = new SqlCommand("INSERT INTO REPORT_TABLE (IMAGEFIELD,IMAGENAME) VALUES (@image,@filename)", con);
    com.Parameters.Add("@image", SqlDbType.Image, imageBytes.Length).Value = imageBytes;
    com.Parameters.Add("@filename", SqlDbType.VarChar, 50).Value = uploadFileName;
    con.Open();
    com.ExecuteNonQuery();
    con.Close();

    SqlConnection conn = new SqlConnection(str);
    string sql = "SELECT * FROM [REPORT_TABLE]";       
    SqlDataAdapter da = new SqlDataAdapter(sql, conn);
    DataSet ds = new DataSet();
    da.Fill(ds);
    DataRow dr = ds.Tables[0].Rows[0];
    Byte[] b = (Byte[])dr["IMAGEFIELD"];
    MemoryStream ms = new MemoryStream(b);     

 **this.pictureBox1.Image = Image.FromStream(ms)**; //(This code is for a Windows application but I want to retrieve an image from a web application) so what should be written instead of the highlighted code?  In imagecontrol, image id is Image1.
}

1 Ответ

0 голосов
/ 10 ноября 2009

вы можете изображение сервера, как это:

    .....
    Image img= Image.FromStream(ms);
    Response.Clear();
    Response.ContentType = "image/jpeg";
    img.Save(Response.OutputStream, ImageFormat.Jpeg);
}

, но это не поместит изображение в <asp:Image ID="Image1" runat="server" />, потому что ему нужен URL изображения, а не объект изображения: (

что вы можете сделать, это настроить отдельную страницу для обслуживания изображения и передать ему идентификатор изображения или другой уникальный идентификатор, связанный с изображением, чтобы показать его в <asp:Image ID="Image1" runat="server" />. просто добавьте новую страницу к вашему решению, скажем ImageServer.aspx и в page_load напишите следующее:

protected void Page_Load(object sender, EventArgs e)
{
     if(Request.QueryString.HasValues())
     {
          var id=Request.QueryString["id"];
          if(!string.IsEmptyOrNull(id))
          {
              SqlConnection conn = new SqlConnection(str);
              //CHANGE SELECT TO GET ONLY IMAGE WITH PASSED ID
              string sql = "SELECT * FROM [REPORT_TABLE]";
              SqlDataAdapter da = new SqlDataAdapter(sql, conn);
              DataSet ds = new DataSet();
              da.Fill(ds);
              DataRow dr = ds.Tables[0].Rows[0];
              Byte[] b = (Byte[])dr["IMAGEFIELD"];
              MemoryStream ms = new MemoryStream(b);     

              Response.Clear();
              Response.ContentType = "image/jpeg";
              var img=system.Drawing.Image.FromStream(ms);
              img.Save((Response.OutputStream, ImageFormat.Jpeg);
              Response.Flush();
              return;
          }
          //HERE YOU MAY RETURN DEFAULT OR ERROR IMAGE
     } 
}

Теперь измените нажатие кнопки на странице загрузки следующим образом:

protected void BtnSave_Click(object sender, EventArgs e)
{
    ....
    //SAVE IMAGE TO DB AND GET IMAGE ID (TO IDENTIFY THIS IMAGE)
    image.ImageUrl = "YOUR_SERVER\ImageServer.aspx?id=" + IMAGE_ID;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...