将图片保存到数据库表中及从数据库表中读取图片并显示

作者:lxc  来源:博客园  发布时间:2009-04-14 11:05  阅读:293 次  原文链接   [收藏]  

一.页面文件.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PictureDeal.aspx.cs" Inherits="MyProject.PictureDeal" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <input id="File1" runat=server type="file"/>&nbsp;&nbsp;<asp:Button runat=server ID=btnUpFile
            Text=UpFile onclick="btnUpFile_Click" />
           
            &nbsp;&nbsp;<asp:Button runat=server ID=btnDisplayPicture Text="DisplayPic"
            onclick="btnDisplayPicture_Click" />
   
    <br />
   
    <img  runat=server id=imgDisplay  runat=server  />
  <asp:Label runat=server ID=lblMsg EnableViewState=false ></asp:Label>
 
  <asp:Repeater runat=server ID=Rept   >
  <HeaderTemplate    >
  <table  cellpadding=0 cellspacing=0  > 

  </HeaderTemplate>
 <ItemTemplate  >
  <tr>
  <td colspan=3 align=left ><%# Eval("ImageID") %></td>
  </tr>
 
  <tr >
  <td  style="border:solid 1px gray;"><%# Eval("ImageType")%></td>
  <td style="border:solid 1px gray;"><%# Eval("ImageLength","{0:N}") %></td>
  <td style="border:solid 1px gray;"><img src="HandlerPicture.ashx?ImageID=<%# Eval("ImageID") %>" height=100 width=200 /></td>
  </tr>
 
 <tr>
 <td colspan=3><%# (Container.ItemIndex+1)%2==0 ? "<hr style='color:blue;' />" : String.Empty %> </td>
  </tr>
 
  </ItemTemplate>
 
<%--  <SeparatorTemplate>
  <tr>
  <td colspan=3 align=left ><hr style=" color:Red;" /></td>
  </tr>
  </SeparatorTemplate>--%>
 
  <FooterTemplate>
  <tr>
  <td colspan =3><hr style="color:Red;"  /></td>
  </tr>
  </table>
  </FooterTemplate>
  </asp:Repeater>
 
    </div>
    </form>
 
</body>
</html>

二.页面代码文件.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.IO;
using System.Data;
using System.Data.SqlClient;

namespace MyProject
{
    public partial class PictureDeal : System.Web.UI.Page
    {

        string strCon = System.Configuration.ConfigurationManager.AppSettings["ConnStr"].ToString();

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        //上传图片并保存到数据库中

        protected void btnUpFile_Click(object sender, EventArgs e)
        {
            string strJs = string.Empty;

            if (File1.PostedFile.ContentLength > 0)
            {
                if (System.IO.Path.GetExtension(File1.PostedFile.FileName) == ".jpg")
                {
                    //string strPath = Server.MapPath(@"~\File");
                    //strPath = System.IO.Path.Combine(strPath , System.IO.Path.GetFileName(File1.PostedFile.FileName));

                    //File1.PostedFile.SaveAs(strPath);
               
                    string strGuid=System.Guid.NewGuid().ToString();

                    try
                    {

                    using (SqlConnection sqlcon = new SqlConnection(strCon))
                    {
                        int intfileLength=File1.PostedFile.ContentLength;
                        string strfileType=File1.PostedFile.ContentType;

                        Stream fileStream = File1.PostedFile.InputStream;

                        byte[] imgBytes=new byte[intfileLength];

                        fileStream.Read(imgBytes,0,intfileLength);

                        SqlCommand sqlCmd = new SqlCommand("insert into tbImageFile(ImageID,ImageType,ImageContent,ImageLength) values (@ImageID,@ImageType,@ImageContent,@ImageLength)", sqlcon);

                        SqlParameter p1 = new SqlParameter("@ImageID", strGuid);

                        SqlParameter p2 = new SqlParameter("@ImageType", strfileType);

                        SqlParameter p3 = new SqlParameter("@ImageContent", imgBytes);

                        SqlParameter p4 = new SqlParameter("@ImageLength", intfileLength);

                        sqlCmd.Parameters.Add(p1);
                        sqlCmd.Parameters.Add(p2);
                        sqlCmd.Parameters.Add(p3);
                        sqlCmd.Parameters.Add(p4);


                        sqlcon.Open();

                        if (sqlCmd.ExecuteNonQuery() > 0)
                        {
                            imgDisplay.Src = "HandlerPicture.ashx?ImageID=" + strGuid;

                            lblMsg.Text = "<script language=javascript>alert('添加成功');</script>";
                        }
                        else
                        {
                            lblMsg.Text = "<script language=javascript>alert('添加失败');</script>";
                        }

                        fileStream.Dispose();

                    }
           
                    }
                    catch(Exception ex)
                    {
                      throw ex;
                    }

                }
                else
                {
                    strJs = "<script language=javascript>alert('上传文件格式不正确');</script>";
                    lblMsg.Text = strJs;
                }
            }
            else
            {
                strJs = "<script language=javascript>alert('请上传文件');</script>";
                lblMsg.Text = strJs;
            }
        }

        //显示图片信息

        protected void btnDisplayPicture_Click(object sender, EventArgs e)
        {
            using (SqlConnection sqlCon = new SqlConnection(strCon))
            {
                SqlCommand sqlCmd = new SqlCommand("select ImageID,ImageContent,ImageLength,ImageType from tbImageFile", sqlCon);

                sqlCon.Open();

                SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCmd);

                DataSet myDs = new DataSet();

               sqlDA.Fill(myDs);

               if (myDs.Tables[0].Rows.Count > 0)
               {
                   Rept.DataSource = myDs.Tables[0].DefaultView;

                   Rept.DataBind();
              
               }           
           
            }
        }
     
    }
}

三.HandlerPicture.ashx 从数据库中读取图片并将二进制字符串写入http输出流.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.IO;
using System.Data;
using System.Data.SqlClient;

namespace MyProject
{
    /// <summary>
    /// 从数据库中获取图片内容.
    /// </summary>

    public class HandlerPicture : IHttpHandler
    {
        string strCon = System.Configuration.ConfigurationManager.AppSettings["ConnStr"];
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/jpg";
            string strGuid = context.Request.QueryString["ImageID"].ToString();

            using(SqlConnection sqlCon=new SqlConnection(strCon))
            {
                SqlCommand sqlCmd = new SqlCommand("select ImageContent from tbImageFile where ImageID=@ImageID", sqlCon);

                SqlParameter p1 = new SqlParameter("@ImageID", strGuid);

                sqlCmd.Parameters.Add(p1);

                sqlCon.Open();

               byte[] bytes=(byte[])sqlCmd.ExecuteScalar();
               context.Response.BinaryWrite(bytes);
            }  
        }

        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }
}

注:在web.config 文件的 <httpHandlers>节中加入如下行,用于指定该文件HandlerPicture.ashx由MyProject.HandlerPicture来处理.
 <add verb="*" path="HandlerPicture.ashx" type="MyProject.HandlerPicture"/>

 

原文地址:https://www.cnblogs.com/xianyin05/p/1640121.html