一、上传到数据库。

(sqlserver为例)

存储文件的数据库中的字段为jimage,类型为image。

在代码中定义类型为byte[]的一个变量buf,在上传组件的PostFile中,从它的InputStream读出字节数组,将buf赋给数据字段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为新闻类,jimage为它的图片属性,即对应表中的image

i.Close();


显示图像:

图片的显示也很简单,在Persister中注意一下:


SqlDataReader reader=SqlHelper.ExecuteReader("select jimage from news");

 

if( reader.Read() )

 {

 news.jimage=(byte[])reader["jimage"];

}

reader.Close();


得到byte[]的内容,要显示也比较简单,在Page_Load()方法中加两句话即可:


Response.ContentType="image/jpeg";

Response.BinaryWrite(ti.content);


这样就可以输出图像了,如果想对图像做一点调整,如旋转,转换格式、获得图片格式(是jpg 还是 gif),请参考下面代码:


 //同样,声明输出不是HTML而是image

 Response.ContentType="image/jpeg";

 

 //从byte[]得到一个image对象

 System.Drawing.Image bmap = Bitmap.FromStream(new MemoryStream(ti.content));

 //操作一下这个图像

  bmap.RotateFlip(RotateFlipType.Rotate180FlipY);

  //输出到页面上

 bmap.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);

//释放image

bmap.Dispose();


要显示图片在某一个image控件上,可采用下法:

要显示图片的位置放一个image控件然后将它的src指向这个页面就行了!

例如:

页面: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>


显示图片的页面上放一个image控件imgZYF 在后代码中写:

imgZYF.ImageUrl =“ViewImage.aspx?UserID=" +userId

二、上传到服务器的磁盘:   页面文件:upload01.aspx



<%@ Page language="c#" Codebehind="upload01.aspx.cs" AutoEventWireup="false" Inherits="upload01.upload01" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>

 <HEAD>

  <title>上传到磁盘</title>

 </HEAD>

 <body>

  <form method="post" runat="server">

   <TABLE height="300" cellSpacing="1" cellPadding="1" width="500" border="0" class="bigtable-bj"

    align="center">

    <TR>

     <TD><FONT face="宋体">

       <TABLE id="Table1" style="WIDTH: 384px; HEIGHT: 54px" cellSpacing="1" cellPadding="1" width="384"

        border="0" align="center">

        <TR>

         <TD>选择文件:</TD>

         <TD><INPUT type="file" id="myfile" runat="server"></TD>

        </TR>

        <TR>

         <TD style="HEIGHT: 21px">输入备注:</TD>

         <TD style="HEIGHT: 21px">

          <asp:TextBox id="TextBox1" runat="server"></asp:TextBox></TD>

        </TR>

        <TR>

         <TD></TD>

         <TD><INPUT type="button" value="上传文件" runat="server" id="Button1" name="Button1">&nbsp;

          <INPUT type="submit" value="清空选择"></TD>

        </TR>

       </TABLE>

      </FONT>

     </TD>

    </TR>

   </TABLE>

  </form>

 </body>

</HTML>


   后置代码:upload01.aspx


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;

namespace upload01

{

 public class upload01 : System.Web.UI.Page

 {

  protected System.Web.UI.HtmlControls.HtmlInputButton Button1;

  protected System.Web.UI.WebControls.TextBox TextBox1;

  protected System.Web.UI.HtmlControls.HtmlInputFile myfile;

 

  private void Page_Load(object sender, System.EventArgs e)

  {

  }

 

  private void Button1_ServerClick(object sender, System.EventArgs e)

  {

   //取得客户端路径及文件名

   string str=myfile.PostedFile.FileName;

   //取得文件类型,如.jpg

   string filename2=str.Substring(str.LastIndexOf(".")).ToString().Trim();

     // 取得文件大小,单位K

   double filesize=myfile.PostedFile.ContentLength/1024.00;

   //以时间刻度定义文件名

   string filename1=DateTime.Now.Ticks.ToString();

    myfile.PostedFile.SaveAs(Server.MapPath("/upload01/"+filename1+filename2));

   //将文件名及相关信息存到数据库中

  }

 }

}


   将文件上传到磁盘中,在表中将文件地址或路径记录下来,这样就可以在后面的程序来引用了。