zoukankan      html  css  js  c++  java
  • 上传图片到数据库,读取数据库中图片并显示(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. }  
    • 运行结果如下

  • 相关阅读:
    回车与换行的区别
    C# 验证数字
    FCKeditor 2.6.6在ASP中的安装及配置方法分享--ZZ转载自网络
    关于Application.Lock…Application.Unlock有什么作用?
    关于Application.Lock和Lock(obj)
    C#解决Linq OrderBy() 失效的小技巧
    文件夹添加 IIS 应用程序池用户权限
    we7调用模板如何区分栏目页与详细页
    第二阶段冲刺(第十天)
    每周总结(第十六周)
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/8624810.html
Copyright © 2011-2022 走看看