保存图片到数据库 收藏
以下的例子是如何将图片保存到数据库,所用的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"> <INPUT id="myFile" type="file" onchange="checkData()" size="34" runat="server" NAME="myFile"> <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(),所以页面上控件将全部被覆盖,只有显示的图片。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunnystar365/archive/2005/10/10/498573.aspx |
|