转:上传图片到数据库,读取数据库中图片并显示(C#)

本文介绍了一种使用C#实现图片上传到数据库的方法,通过FileUpload控件获取图片,然后将图片保存为字节数组,利用SQL语句存入数据库。在读取时,通过查询数据库并输出到Response.OutputStream来显示图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/bfcady/archive/2008/07/07/2622701.aspx

 

思路:建立流对象,将上传图片临时保存到byte数组中,再用SQL语句将其保存到数据库中

说明:以下程序一切从简,实际用应用中应注意使用try等语句

  • 创建表ImageStore,表结构如下图

  • 主页面HTML如下

 

  1. <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>  
  2.   
  3.   
  4.   
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  6.   
  7.   
  8.   
  9. <html xmlns="http://www.w3.org/1999/xhtml">  
  10.   
  11. <head runat="server">  
  12.   
  13.     <title>图片上传</title>  
  14.   
  15. </head>  
  16.   
  17. <body>  
  18.   
  19.     <form id="form1" runat="server">  
  20.   
  21.     <div>  
  22.   
  23.         <asp:FileUpload ID="fuImage" runat="server" />  
  24.   
  25.     </div>  
  26.   
  27.     <div>  
  28.   
  29.         <asp:Button ID="btnUpload" runat="server" Text="上传图片" OnClick="btnUpload_Click" />  
  30.   
  31.     </div>  
  32.   
  33.     <div>  
  34.   
  35.         输入图片的ID:<asp:TextBox ID="txtImageID" runat="server"></asp:TextBox>  
  36.   
  37.     </div>  
  38.   
  39.     <div>  
  40.   
  41.         <asp:Button ID="btnSubmit" runat="server" Text="显示图片"    
  42.   
  43.             onclick="btnSubmit_Click" />  
  44.   
  45.     </div>  
  46.   
  47.     <div>  
  48.   
  49.         <asp:Image ID="Image1" runat="server" />  
  50.   
  51.     </div>  
  52.   
  53.     </form>  
  54.   
  55. </body>  
  56.   
  57. </html>  

 


<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>



<!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>

        <asp:FileUpload ID="fuImage" runat="server" />

    </div>

    <div>

        <asp:Button ID="btnUpload" runat="server" Text="上传图片" OnClick="btnUpload_Click" />

    </div>

    <div>

        输入图片的ID:<asp:TextBox ID="txtImageID" runat="server"></asp:TextBox>

    </div>

    <div>

        <asp:Button ID="btnSubmit" runat="server" Text="显示图片" 

            onclick="btnSubmit_Click" />

    </div>

    <div>

        <asp:Image ID="Image1" runat="server" />

    </div>

    </form>

</body>

</html>
  • 主页面后台代码

 

  1. using System;   
  2.   
  3. using System.Configuration;   
  4.   
  5. using System.Data;   
  6.   
  7. using System.Web;   
  8.   
  9. using System.Web.Security;   
  10.   
  11. using System.Web.UI;   
  12.   
  13. using System.Web.UI.HtmlControls;   
  14.   
  15. using System.Web.UI.WebControls;   
  16.   
  17. using System.Web.UI.WebControls.WebParts;   
  18.   
  19. using System.IO;   
  20.   
  21. using System.Data.SqlClient;   
  22.   
  23.   
  24.   
  25. public partial class _Default : System.Web.UI.Page    
  26.   
  27. {   
  28.   
  29.     protected void Page_Load(object sender, EventArgs e)   
  30.   
  31.     {   
  32.   
  33.   
  34.   
  35.     }   
  36.   
  37.     protected void btnUpload_Click(object sender, EventArgs e)   
  38.   
  39.     {   
  40.   
  41.         int imageLength = fuImage.PostedFile.ContentLength;//取得图片大小,以字节为单位   
  42.   
  43.         byte[] imageByteArray = new byte[imageLength];  //图片将临时存储在Byte(二进制)数组   
  44.   
  45.         Stream imageStream = fuImage.PostedFile.InputStream;//建立流对象   
  46.   
  47.         imageStream.Read(imageByteArray, 0, imageLength);//将图片读取到imageByteArray数组中,其中0为起始位置,imageLength为要读取的长度   
  48.   
  49.         //以下为数据库连接   
  50.   
  51.         SqlConnection sqlconn = new SqlConnection("server=(local);database=a0522183734;uid=a0522183734;pwd=bfcady");   
  52.   
  53.         string sql = "insert imageStore(ImageData,ImageContentType,ImageDescription,ImageSize) values(@Image,@ContentType,@ImageDescription, @ImageSize)";   
  54.   
  55.         SqlCommand sqlcom = new SqlCommand(sql, sqlconn);   
  56.   
  57.         sqlcom.Parameters.AddWithValue("@Image", imageByteArray);   
  58.   
  59.         sqlcom.Parameters.AddWithValue("@ContentType", Path.GetExtension(fuImage.PostedFile.FileName));//取得文件扩展名   
  60.   
  61.         //取得文件名,不包含扩展名,实际应用中作为图片描述用   
  62.   
  63.         sqlcom.Parameters.AddWithValue("@ImageDescription", Path.GetFileNameWithoutExtension(fuImage.PostedFile.FileName));   
  64.   
  65.         sqlcom.Parameters.AddWithValue("@ImageSize", imageLength);   
  66.   
  67.         sqlconn.Open();   
  68.   
  69.         sqlcom.ExecuteNonQuery();   
  70.   
  71.         sqlconn.Close();   
  72.   
  73.     }   
  74.   
  75.     protected void btnSubmit_Click(object sender, EventArgs e)   
  76.   
  77.     {   
  78.   
  79.         //改变图片的URL   
  80.   
  81.         Image1.ImageUrl = "ReadImage.ashx?imgID=" + txtImageID.Text;   
  82.   
  83.     }   
  84.   
  85. }  

 


using System;

using System.Configuration;

using System.Data;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.IO;

using System.Data.SqlClient;



public partial class _Default : System.Web.UI.Page 

{

    protected void Page_Load(object sender, EventArgs e)

    {



    }

    protected void btnUpload_Click(object sender, EventArgs e)

    {

        int imageLength = fuImage.PostedFile.ContentLength;//取得图片大小,以字节为单位

        byte[] imageByteArray = new byte[imageLength];  //图片将临时存储在Byte(二进制)数组

        Stream imageStream = fuImage.PostedFile.InputStream;//建立流对象

        imageStream.Read(imageByteArray, 0, imageLength);//将图片读取到imageByteArray数组中,其中0为起始位置,imageLength为要读取的长度

        //以下为数据库连接

        SqlConnection sqlconn = new SqlConnection("server=(local);database=a0522183734;uid=a0522183734;pwd=bfcady");

        string sql = "insert imageStore(ImageData,ImageContentType,ImageDescription,ImageSize) values(@Image,@ContentType,@ImageDescription, @ImageSize)";

        SqlCommand sqlcom = new SqlCommand(sql, sqlconn);

        sqlcom.Parameters.AddWithValue("@Image", imageByteArray);

        sqlcom.Parameters.AddWithValue("@ContentType", Path.GetExtension(fuImage.PostedFile.FileName));//取得文件扩展名

        //取得文件名,不包含扩展名,实际应用中作为图片描述用

        sqlcom.Parameters.AddWithValue("@ImageDescription", Path.GetFileNameWithoutExtension(fuImage.PostedFile.FileName));

        sqlcom.Parameters.AddWithValue("@ImageSize", imageLength);

        sqlconn.Open();

        sqlcom.ExecuteNonQuery();

        sqlconn.Close();

    }

    protected void btnSubmit_Click(object sender, EventArgs e)

    {

        //改变图片的URL

        Image1.ImageUrl = "ReadImage.ashx?imgID=" + txtImageID.Text;

    }

}
  • 创建一般处理程序ReadImage.ashx,读取图片
 
    1. <%@ WebHandler Language="C#" Class="ReadImage" %>   
    2.   
    3.   
    4.   
    5. using System;   
    6.   
    7. using System.Web;   
    8.   
    9. using System.Data.SqlClient;   
    10.   
    11.   
    12.   
    13. public class ReadImage : IHttpHandler {   
    14.   
    15.        
    16.   
    17.     public void ProcessRequest (HttpContext context) {   
    18.   
    19.         string imgID = context.Request.QueryString["imgID"].ToString();   
    20.   
    21.         SqlConnection sqlconn = new SqlConnection("server=(local);database=a0522183734;uid=a0522183734;pwd=bfcady");   
    22.   
    23.         string sql = "select * from ImageStore where ImageID=" + imgID;   
    24.   
    25.         SqlCommand sqlcom = new SqlCommand(sql, sqlconn);   
    26.   
    27.         sqlconn.Open();   
    28.   
    29.         SqlDataReader sqldr = sqlcom.ExecuteReader();   
    30.   
    31.         if (sqldr.Read())//移到第一条记录,如果第一条记录不为空   
    32.   
    33.         {   
    34.   
    35.             context.Response.ContentType = (string)sqldr["ImageContentType"];//设置输出类型   
    36.   
    37.             context.Response.OutputStream.Write((byte[])sqldr["ImageData"], 0, (int)sqldr["ImageSize"]);   
    38.   
    39.             context.Response.End();   
    40.   
    41.         }   
    42.   
    43.         sqlconn.Close();   
    44.   
    45.     }   
    46.   
    47.     
    48.   
    49.     public bool IsReusable {   
    50.   
    51.         get {   
    52.   
    53.             return false;   
    54.   
    55.         }   
    56.   
    57.     }   
    58.   
    59. }  
    
    <%@ WebHandler Language="C#" Class="ReadImage" %>
    
    
    
    using System;
    
    using System.Web;
    
    using System.Data.SqlClient;
    
    
    
    public class ReadImage : IHttpHandler {
    
        
    
        public void ProcessRequest (HttpContext context) {
    
            string imgID = context.Request.QueryString["imgID"].ToString();
    
            SqlConnection sqlconn = new SqlConnection("server=(local);database=a0522183734;uid=a0522183734;pwd=bfcady");
    
            string sql = "select * from ImageStore where ImageID=" + imgID;
    
            SqlCommand sqlcom = new SqlCommand(sql, sqlconn);
    
            sqlconn.Open();
    
            SqlDataReader sqldr = sqlcom.ExecuteReader();
    
            if (sqldr.Read())//移到第一条记录,如果第一条记录不为空
    
            {
    
                context.Response.ContentType = (string)sqldr["ImageContentType"];//设置输出类型
    
                context.Response.OutputStream.Write((byte[])sqldr["ImageData"], 0, (int)sqldr["ImageSize"]);
    
                context.Response.End();
    
            }
    
            sqlconn.Close();
    
        }
    
     
    
        public bool IsReusable {
    
            get {
    
                return false;
    
            }
    
        }
    
    }
  • 运行结果如下

upLoatImage.aspx

Code:
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="upLoadImage.aspx.cs" Inherits="upLoadImage" %>   
  2.   
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  4.   
  5. <html xmlns="http://www.w3.org/1999/xhtml">   
  6. <head runat="server">   
  7.     <title>无标题页</title>   
  8.     <style type="text/css">  
  9.         #File1   
  10.         {   
  11.             width: 206px;   
  12.             height: 25px;   
  13.         }  
  14.         #myUpLoadImage   
  15.         {   
  16.             margin-bottom: 0px;   
  17.         }   
  18.     </style>   
  19.   
  20.     <script language="javascript" type="text/javascript">   
  21. // <!CDATA[   
  22.   
  23.         function File1_onclick() {   
  24.   
  25.         }   
  26.   
  27.         function myUpLoadImage_onclick() {   
  28.   
  29.         }   
  30.   
  31. // ]]>   
  32.     </script>   
  33. </head>   
  34. <body>   
  35.     <form id="form1" runat="server">   
  36.     <div>   
  37.         排<asp:TextBox ID="rows" runat="server"></asp:TextBox>   
  38.         层<asp:TextBox ID="floors" runat="server"></asp:TextBox>   
  39.         <br />   
  40.         列<asp:TextBox ID="lines" runat="server"></asp:TextBox>   
  41.         位<asp:TextBox ID="bits" runat="server"></asp:TextBox>   
  42.         <br />   
  43.         <asp:FileUpload ID="FileUpload1" runat="server" />      
  44.         <asp:Button ID="btnUpLoad"  runat="server" Text="上传"    
  45.             onclick="btnUpLoad_Click" />   
  46.        
  47.         <br />   
  48.        
  49.         <asp:Label ID="Label1" runat="server" Text="上传完成" Width="200px" Visible="false"></asp:Label>   
  50.         <br />   
  51.      
  52.        
  53.         <asp:Image ID="Image1" runat="server" style="margin-left: 0px" Visible="false"/>   
  54.        
  55.         </div>   
  56.     </form>   
  57. </body>   
  58. </html>   

upLoadImage.aspx.cs

Code:
  1. using System;   
  2. using System.Collections;   
  3. using System.Configuration;   
  4. using System.Data;   
  5. using System.Linq;   
  6. using System.Web;   
  7. using System.Web.Security;   
  8. using System.Web.UI;   
  9. using System.Web.UI.HtmlControls;   
  10. using System.Web.UI.WebControls;   
  11. using System.Web.UI.WebControls.WebParts;   
  12. using System.Xml.Linq;   
  13. using System.IO;   
  14. using System.Data.SqlClient;   
  15.   
  16. public partial class upLoadImage : System.Web.UI.Page   
  17. {   
  18.     protected void Page_Load(object sender, EventArgs e)   
  19.     {   
  20.         if (!IsPostBack)   
  21.         {        }   
  22.            
  23.     }   
  24.     protected void btnUpLoad_Click(object sender, EventArgs e)   
  25.     {   
  26.         HttpPostedFile upPhoto = FileUpload1.PostedFile;   
  27.         int upPhotoLength = upPhoto.ContentLength;   
  28.         byte[] PhotoArray = new Byte[upPhotoLength];   
  29.         Stream PhotoStream = upPhoto.InputStream;   
  30.         PhotoStream.Read(PhotoArray, 0,upPhotoLength);   
  31.            
  32.            
  33.         System.Drawing.Bitmap map = new System.Drawing.Bitmap(PhotoStream);   
  34.         //map.Save("~/dangquan.jpg");   
  35.         map.Save("F://WebSite2//dangquan.jpg");   
  36.         Label1.Visible = true;   
  37.         Image1.Visible = true;   
  38.         Image1.ImageUrl = "~/dangquan.jpg";   
  39.   
  40.         int Row = int.Parse(rows.Text.Trim().ToString());   
  41.         int Floor = int.Parse(floors.Text.Trim().ToString());   
  42.         int Line = int.Parse(lines.Text.Trim().ToString());   
  43.         int Bit = int.Parse(bits.Text.Trim().ToString());   
  44.         string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnectionString"].ConnectionString;   
  45.         SqlConnection conn = new SqlConnection();   
  46.   
  47.         conn.ConnectionString = connectionString;   
  48.         conn.Open();   
  49.         SqlCommand cmd = new SqlCommand("UpLoadImage", conn);   
  50.         cmd.CommandType = CommandType.Text;   
  51.         cmd.Parameters.Add("@image", SqlDbType.Image);   
  52.         cmd.Parameters["@image"].Value = PhotoArray;   
  53.         cmd.CommandText = string.Format("update storeinfo set image = @image  where row = {0} and floor = {1} and line = {2} and bit ={3}",   
  54.             Row, Floor, Line, Bit);   
  55.         cmd.ExecuteNonQuery();   
  56.         cmd.Dispose();   
  57.         conn.Close();   
  58.     }   
  59. }   

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值