一个人的天空

知识就像宇宙,你不知道它到底存在多少奥秘,必须不断的探索
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

保存图片到数据库中

Posted on 2005-10-10 10:33  一个人的天空  阅读(5987)  评论(15编辑  收藏  举报
   以下的例子是如何将图片保存到数据库,所用的Northwind数据库,在里面建一张表                        
    if    exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[UpImage]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[UpImage]
GO

CREATE TABLE [dbo].[UpImage] (
 [ID] [int] IDENTITY (1, 1) NOT NULL ,
 [ImageName] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 [Image] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

前台代码:
<%@ Page language="c#" Codebehind="UpImageToDataBase.aspx.cs" AutoEventWireup="false" Inherits="NetTest.UpImageToDataBase" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>UpImageToDataBase</title>
  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  <meta name="CODE_LANGUAGE" Content="C#">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
 </HEAD>
 <body MS_POSITIONING="GridLayout">
  <script>
   function checkData()
   {
    var fileName=document.getElementById("myFile").value;
    if(fileName=="")
     return;
    var exName=fileName.substr(fileName.lastIndexOf(".")+1).toUpperCase()
    //alert(exName)
    if(exName=="JPG"||exName=="BMP"||exName=="GIF")
    {
    document.getElementById("myimg").src=fileName
    }
    else
    {
     alert("请选择正确的图片文件")
     document.getElementById("myFile").value=""
    }
   }
  </script>
  <form id="Form1" method="post" runat="server">
   <table align="center" border="1" width="80%">
    <tr>
     <td colspan="2" align="center" height="30"><font style="FONT-WEIGHT: bold; FONT-SIZE: 11pt">保存图片到SQL数据库</font></td>
    </tr>
    <tr>
     <td align="center" height="30"><font style="FONT-SIZE: 10pt">图片:</font></td>
     <td height="30">&nbsp; <INPUT id="myFile" type="file" onchange="checkData()" size="34" runat="server" NAME="myFile">
      &nbsp;&nbsp;<IMG id="myimg" height="125" alt="" src="" width="125"><font style="FONT-SIZE: 10pt">(图片文件不大于200K)</font></td>
    </tr>
    <tr>
     <td colspan="2" align="center">
      <asp:Button id="btnSubmit" runat="server" Text="确定" Width="77px" CssClass="redButtonCss"></asp:Button></td>
    </tr>
   </table>
  </form>
 </body>
</HTML>
后台代码:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Data.SqlClient;
namespace NetTest
{
 /// <summary>
 /// UpImageToDataBase 的摘要说明。
 /// </summary>
 public class UpImageToDataBase : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.Button btnSubmit;
  protected System.Web.UI.HtmlControls.HtmlInputFile myFile;
  private Int32 FileLength=0;//有可能图片的大小会超出INT的范围,所以声明为Int32,当然这和下面大小的判断有关系
  private string con="server=localhost;uid=sa;pwd=;database=northwind";
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
 
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.btnSubmit.Click += new System.EventHandler(this.btnSubmit_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private void btnSubmit_Click(object sender, System.EventArgs e)
  {
   try
   {
    SqlConnection conn = new SqlConnection(con);
    string FileName=myFile.Value;
    HttpPostedFile UpFile=myFile.PostedFile;//获取对由客户端指定的上传文件的访问
    FileLength=UpFile.ContentLength;//获取上传文件的字节大小
    if(FileLength==0)
    {
     Response.Write("<script>alert('对不起,请选择要上传的图片')</script>");
     return;
    }
    string exName=FileName.Substring(FileName.LastIndexOf(".")+1).ToUpper();//截取图片的后缀名
    if(exName=="JPG"||exName=="BMP"||exName=="GIF")//判断图片的类型
    {
     if(FileLength>204800)//判断图片是否大于200k(根据自己的需要判断大小)
     {
      Response.Write("<script>alert('对不起,图片大小不能大于200K')</script>");
      return;
     }
     else
     {
      string ImageName=DateTime.Now.ToString("yyyyMMddhhmmssfff")+"."+exName;//图片名称设置为保存的时间
      Byte[]  FileByte  =  new  Byte[FileLength]; //图象文件储存到数组 
      Stream  ObjectStream  =  UpFile.InputStream;//建立数据流对像,获取一个 Stream 对象,该对象指向一个上载文件,以准备读取该文件的内容。
  
      ObjectStream.Read(FileByte,0,FileLength); //读取图象文件数据
      string StrSql="Insert Into UpImage Values(@ImageName,@Image)";
      SqlCommand Cmd=new SqlCommand(StrSql,conn);
      Cmd.Parameters.Add("@Image",SqlDbType.Binary,FileLength).Value=FileByte; 
      Cmd.Parameters.Add("@ImageName",SqlDbType.VarChar,100).Value=ImageName; 
      conn.Open();
      Cmd.ExecuteNonQuery();
      conn.Close();
      Response.Write("<script>alert('图片保存到数据库成功')</script>");
     }
    }
    else
    {
     Response.Write("<script>alert('对不起,请选择正确的的图片')</script>");
     return;
    }
   
   }
   catch(Exception ex)
   {
    Response.Write("<script>alert('"+ex.Message+"')</script>");
   }
  }
 }
}

如果要将图片显示在页面上,可以用一下的代码:在页面上加一个BUTTON控件,在CLICK事件中加入一下代码即可
SqlConnection cn=new SqlConnection(conn);
   SqlCommand cmd=new SqlCommand();
   cmd.CommandText="select Image from UpImage";
   cmd.Connection=cn;
   cn.Open();
   this.Response.ContentType="image/jpeg";
   //this.Response.ContentType="image/bmp";
   //this.Response.ContentType="image/gif";
   SqlDataReader dr=cmd.ExecuteReader();
   while(dr.Read())
   {
    this.Response.BinaryWrite((byte[])dr["Image"]);
   }
   cn.Close();
   以上代码只能在页面上显示一张图片,因为用的是Response.BinaryWrite(),所以页面上控件将全部被覆盖,只有
显示的图片。