開發(fā)環(huán)境:Window 2000、SQLServer2000、.Net Framework SDK正式版 開發(fā)語言:C#、ASP.Net 簡介:數據庫中圖片存儲及讀取
說明:在ASP中,我們用Request.TotalBytes、Request.BinaryRead()來上傳圖片,這個可惡的BinaryRead()方法非常笨,單個文件上傳倒沒什么大事,單如果多個圖片上專可就花大氣力了…!而現在ASP.Net中將會把解決以前ASP中文件上傳的種種問題,使你在ASP.Net中輕輕松松開發(fā)出功能強大的上傳程序,下面大家看看例子啦。
首先在SQL Server中建立一個圖片存儲的數庫表,SqlScript如下:
if exists (select * from dbo.sysobjects where id = object_id(N"[dbo].[image]") and OBJECTPROPERTY(id, N"IsUserTable") = 1) drop table [dbo].[image] GO
CREATE TABLE [dbo].[image] ( [img_pk] [int] IDENTITY (1, 1) NOT NULL , [img_name] [varchar] (50) NULL , [img_data] [image] NULL , [img_contenttype] [varchar] (50) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
ALTER TABLE [dbo].[image] WITH NOCHECK ADD CONSTRAINT [PK_image] PRIMARY KEY NONCLUSTERED ( [img_pk] ) ON [PRIMARY] GO ------------------------------------------------------------ 一、上傳圖片: imgupload.aspx文件: <%@ Page language="c#" Codebehind="imgupload.aspx.cs" AutoEventWireup="false" Inherits="study.uploadimage.imgupload" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>imgupload</title> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <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> <form enctype="multipart/form-data" runat="server" id="form1" name="form1"> 文件名 <input type="text" id="imgName" runat="server" NAME="imgName"> <br> 選擇文件 <input id="UploadFile" type="file" runat="server" NAME="UploadFile"> <br> <asp:button Text="上傳" runat="server" ID="Button1" /> </form> <a href="imgview.aspx?id=1" target="_blank">看圖</a> </body> </HTML>
codebehind文件: 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 study.uploadimage { /// <summary> /// imgupload 的摘要說明。 /// </summary> public class imgupload : System.Web.UI.Page { protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.HtmlControls.HtmlInputText imgName; protected System.Web.UI.HtmlControls.HtmlInputFile UploadFile; private void Page_Load(object sender, System.EventArgs e) { // 在此處放置用戶代碼以初始化頁面 }
private void Button1_Click(object sender, System.EventArgs e) { Stream imgStream; int imgLen; string imgName_value; string imgContentType; string imgUploadedName; imgStream = UploadFile.PostedFile.InputStream; imgLen = UploadFile.PostedFile.ContentLength; imgUploadedName = UploadFile.PostedFile.FileName; byte[] imgBinaryData=new byte[imgLen]; imgContentType = UploadFile.PostedFile.ContentType; imgName_value = imgName.Value;
try { if(imgName_value.Length < 1) { imgName_value = GetLastRightOf("\\",imgUploadedName ); } } catch(Exception myEx) { Response.Write(myEx.Message); }
int n = imgStream.Read(imgBinaryData, 0, imgLen); int NumRowsAffected = MyDatabaseMethod(imgName_value, imgBinaryData, imgContentType); if(NumRowsAffected > 0) Response.Write( "<BR> uploaded image " ); else Response.Write ( "<BR> an error occurred uploading the image.d " ); } public string GetLastRightOf(string LookFor,string myString) { int StrPos; StrPos = myString.LastIndexOf(LookFor); return myString.Substring(StrPos + 1); } public int MyDatabaseMethod(string imgName,byte[] imgbin,string imgcontenttype) { SqlConnection connection = new SqlConnection(Application["Test_Conn"].ToString()); string SQL="INSERT INTO Image (img_name,img_data,img_contenttype) VALUES ( @img_name, @img_data,@img_contenttype )"; SqlCommand command=new SqlCommand ( SQL,connection ); SqlParameter param0=new SqlParameter ( "@img_name", SqlDbType.VarChar,50 ); param0.Value = imgName; command.Parameters.Add( param0 );
SqlParameter param1=new SqlParameter ( "@img_data", SqlDbType.Image ); param1.Value = imgbin; command.Parameters.Add( param1 ); SqlParameter param2 =new SqlParameter ( "@img_contenttype", SqlDbType.VarChar,50 ); param2.Value = imgcontenttype; command.Parameters.Add( param2 ); connection.Open(); int numRowsAffected = command.ExecuteNonQuery(); connection.Close(); return numRowsAffected; }
#region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:該調用是 ASP.NET Web 窗體設計器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 設計器支持所需的方法 - 不要使用代碼編輯器修改 /// 此方法的內容。 /// </summary> private void InitializeComponent() { this.Button1.Click += new System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load);
} #endregion
} }
------------------------------------------------------------
二、瀏覽圖片: imgvies.aspx文件: <%@ Page language="c#" Codebehind="imgview.aspx.cs" AutoEventWireup="false" Inherits="study.uploadimage.imgview" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>imgview</title> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <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"> </body> </HTML>
codebehind文件: 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.Data.SqlClient;
namespace study.uploadimage { /// <summary> /// imgview 的摘要說明。 /// </summary> public class imgview : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { SqlConnection myDSN = new SqlConnection(Application["Test_Conn"].ToString()); myDSN.Open();
int imgid = int.Parse(Request.QueryString["id"]); string sqlText = "SELECT img_name, img_data, img_contenttype FROM image where img_pk=" + imgid; Trace.Write(sqlText); SqlCommand MyCommand = new SqlCommand (sqlText, myDSN); SqlDataReader dr =MyCommand.ExecuteReader(); if(dr.Read()) { Response.ContentType = (dr["img_contenttype"].ToString()); Response.BinaryWrite((byte[])dr["img_data"]); } myDSN.Close(); }
#region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:該調用是 ASP.NET Web 窗體設計器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 設計器支持所需的方法 - 不要使用代碼編輯器修改 /// 此方法的內容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load);
} #endregion } }
這樣這個程序就完成了,簡單吧。當然還很多改進之處,希望大家多想想多編編一定可以寫出更多的圖象上傳程序。
|