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

from:http://blog.csdn.net/bfcady/article/details/2622701

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

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

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

  • 主页面HTML如下
[html] view plain copy
 
  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>  
  • 主页面后台代码
[csharp] view plain copy
 
  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. }  
  • 创建一般处理程序ReadImage.ashx,读取图片
 
  • [csharp] view plain copy
     
    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. }  
  • 运行结果如下

原文地址:https://www.cnblogs.com/liuqiyun/p/8624810.html