ASP.NET上傳文件面面觀
一、ASP.NET上傳文件數(shù)據(jù)庫(kù)。
存儲(chǔ)文件的數(shù)據(jù)庫(kù)中的字段為jimage,類型為image。
在代碼中定義類型為byte[]的一個(gè)變量buf,在上傳組件的PostFile中,從它的InputStream讀出字節(jié)數(shù)組,將buf賦給數(shù)據(jù)字段jimage就可以了。
- int len = this.File1.PostedFile.ContentLength;
- byte[] buf = new byte[len];
- Stream i = this.File1.PostedFile.InputStream;
- i.Read(buf,0,buf.Length);
- news.jimage=buf;
- //news為新聞?lì)?,jimage為它的圖片屬性,即對(duì)應(yīng)表中的image
- i.Close();
顯示圖像:
圖片的顯示也很簡(jiǎn)單,在Persister中注意一下:
- SqlDataReader reader=SqlHelper.ExecuteReader
- ("select jimage from news");
- if( reader.Read() )
- {
- news.jimage=(byte[])reader["jimage"];
- }
- reader.Close();
得到byte[]的內(nèi)容,要顯示也比較簡(jiǎn)單,在Page_Load()方法中加兩句話即可:
- Response.ContentType="image/jpeg";
- Response.BinaryWrite(ti.content);
這樣就可以輸出圖像了,如果想對(duì)圖像做一點(diǎn)調(diào)整,如旋轉(zhuǎn),轉(zhuǎn)換格式、獲得圖片格式(是jpg 還是 gif),請(qǐng)參考下面代碼:
- //同樣,聲明輸出不是HTML而是image
- Response.ContentType="image/jpeg";
- //從byte[]得到一個(gè)image對(duì)象
- System.Drawing.Image bmap = Bitmap.FromStream
- (new MemoryStream(ti.content));
- //操作一下這個(gè)圖像
- bmap.RotateFlip(RotateFlipType.Rotate180FlipY);
- //輸出到頁(yè)面上
- bmap.Save(Response.OutputStream,System.
- Drawing.Imaging.ImageFormat.Jpeg);
- //釋放image
- bmap.Dispose();
要顯示圖片在某一個(gè)image控件上,可采用下法:
要顯示圖片的位置放一個(gè)image控件然后將它的src指向這個(gè)頁(yè)面就行了!
例如:
頁(yè)面:ViewImage.aspx
- 〈%@Import Namespace="System.IO"% 〉
- 〈%@Import Namespace="System.Data"% 〉
- 〈%@Import Namespace="System.Data.SqlClient"% 〉
- 〈%@ Page Language="C#" Debug="True" % 〉
- 〈script runat="server" 〉
- private void Page_Load(Object sender, System.EventArgs e)
- {
- string imgid =Request.QueryString["UserID"];
- string connstr="data source=(local);initial
- catalog=Test;integrated security=SSPI;persist
- security info=True;packet size=4096";
- string sql="SELECT IMGTITLE,imgdata,
- imgtype FROM ImageStore WHERE id = '"+ imgid "'";
- SqlConnection connection = new SqlConnection(connstr);
- SqlCommand command = new SqlCommand(sql, connection);
- connection.Open();
- SqlDataReader dr = command.ExecuteReader();
- if(dr.Read())
- {
- Response.ContentType = dr["imgtype"].ToString();
- Response.BinaryWrite( (byte[]) dr["imgdata"] );
- Response.Write(dr["IMGTITLE"].ToString());
- }
- connection.Close();
- }
- 〈/script 〉
顯示圖片的頁(yè)面上放一個(gè)image控件imgZYF 在后代碼中寫(xiě):imgZYF.ImageUrl =“ViewImage.aspx?UserID=" +userId
二、ASP.NET上傳文件到服務(wù)器的磁盤(pán):
頁(yè)面文件:upload01.aspx
- 〈%@Pagelanguage="c#"Codebehind="upload01.aspx.cs"
- AutoEventWireup="false"Inherits="upload01.upload01"%〉
- 〈!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"〉
- 〈HTML〉
- 〈HEAD〉
- 〈title〉上傳到磁盤(pán)〈/title〉
- 〈/HEAD〉
- 〈body〉
- 〈formid="Form1"method="post"runat="server"〉
- 〈TABLEheight="300"cellSpacing="1"cellPadding="1"
- width="500"border="0"class="bigtable-bj"
- align="center"〉
- 〈TR〉
- 〈TD〉〈FONTface="宋體"〉
- 〈TABLEid="Table1"style="WIDTH:384px;HEIGHT:54px"
- cellSpacing="1"cellPadding="1"width="384"
- border="0"align="center"〉
- 〈TR〉
- 〈TD〉選擇文件:〈/TD〉
- 〈TD〉〈INPUTtype="file"id="myfile"runat="server"〉〈/TD〉
- 〈/TR〉
- 〈TR〉
- 〈TDstyle="HEIGHT:21px"〉輸入備注:〈/TD〉
- 〈TDstyle="HEIGHT:21px"〉
- 〈asp:TextBoxid="TextBox1"runat="server"〉〈/asp:TextBox〉〈/TD〉
- 〈/TR〉
- 〈TR〉
- 〈TD〉〈/TD〉
- 〈TD〉〈INPUTtype="button"value="上傳文件"
- runat="server"id="Button1"name="Button1"〉
- 〈INPUTtype="submit"value="清空選擇"〉〈/TD〉
- 〈/TR〉
- 〈/TABLE〉
- 〈/FONT〉
- 〈/TD〉
- 〈/TR〉
- 〈/TABLE〉
- 〈/form〉
- 〈/body〉
- 〈/HTML〉
- 后置代碼:upload01.aspx
- usingSystem;
- usingSystem.Collections;
- usingSystem.ComponentModel;
- usingSystem.Data;
- usingSystem.Drawing;
- usingSystem.Web;
- usingSystem.Web.SessionState;
- usingSystem.Web.UI;
- usingSystem.Web.UI.WebControls;
- usingSystem.Web.UI.HtmlControls;
- namespaceupload01
- {
- publicclassupload01:System.Web.UI.Page
- {
- protectedSystem.Web.UI.HtmlControls.HtmlInputButtonButton1;
- protectedSystem.Web.UI.WebControls.TextBoxTextBox1;
- protectedSystem.Web.UI.HtmlControls.HtmlInputFilemyfile;
- privatevoidPage_Load(objectsender,System.EventArgse)
- {
- //昨夜風(fēng)www.zuoyefeng.com
- }
- privatevoidButton1_ServerClick
- (objectsender,System.EventArgse)
- {
- //取得客戶端路徑及文件名
- stringstr=myfile.PostedFile.FileName;
- //取得ASP.NET上傳文件類型,如.jpg
- stringfilename2=str.Substring
- (str.LastIndexOf(".")).ToString().Trim();
- //取得ASP.NET上傳文件大小,單位K
- doublefilesize=myfile.PostedFile.ContentLength/1024.00;
- //以時(shí)間刻度定義文件名
- stringfilename1=DateTime.Now.Ticks.ToString();
- myfile.PostedFile.SaveAs(Server.MapPath
- ("/upload01/"+filename1+filename2));
- //將文件名及相關(guān)信息存到數(shù)據(jù)庫(kù)中
- }
- }
- }
將ASP.NET上傳文件到磁盤(pán)中,在表中將文件地址或路徑記錄下來(lái),這樣就可以在后面的程序來(lái)引用了。
【編輯推薦】