上傳圖片到數據庫,讀取數據庫中圖片並顯示(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. }  
  • 運行結果如下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM