http://blog.youkuaiyun.com/bfcady/archive/2008/07/07/2622701.aspx
思路:建立流对象,将上传图片临时保存到byte数组中,再用SQL语句将其保存到数据库中
说明:以下程序一切从简,实际用应用中应注意使用try等语句
- 创建表ImageStore,表结构如下图
- 主页面HTML如下
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title>图片上传</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <asp:FileUpload ID="fuImage" runat="server" />
- </div>
- <div>
- <asp:Button ID="btnUpload" runat="server" Text="上传图片" OnClick="btnUpload_Click" />
- </div>
- <div>
- 输入图片的ID:<asp:TextBox ID="txtImageID" runat="server"></asp:TextBox>
- </div>
- <div>
- <asp:Button ID="btnSubmit" runat="server" Text="显示图片"
- onclick="btnSubmit_Click" />
- </div>
- <div>
- <asp:Image ID="Image1" runat="server" />
- </div>
- </form>
- </body>
- </html>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>图片上传</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="fuImage" runat="server" />
</div>
<div>
<asp:Button ID="btnUpload" runat="server" Text="上传图片" OnClick="btnUpload_Click" />
</div>
<div>
输入图片的ID:<asp:TextBox ID="txtImageID" runat="server"></asp:TextBox>
</div>
<div>
<asp:Button ID="btnSubmit" runat="server" Text="显示图片"
onclick="btnSubmit_Click" />
</div>
<div>
<asp:Image ID="Image1" runat="server" />
</div>
</form>
</body>
</html>
- 主页面后台代码
- using System;
- using System.Configuration;
- using System.Data;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.IO;
- using System.Data.SqlClient;
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- protected void btnUpload_Click(object sender, EventArgs e)
- {
- int imageLength = fuImage.PostedFile.ContentLength;//取得图片大小,以字节为单位
- byte[] imageByteArray = new byte[imageLength]; //图片将临时存储在Byte(二进制)数组
- Stream imageStream = fuImage.PostedFile.InputStream;//建立流对象
- imageStream.Read(imageByteArray, 0, imageLength);//将图片读取到imageByteArray数组中,其中0为起始位置,imageLength为要读取的长度
- //以下为数据库连接
- SqlConnection sqlconn = new SqlConnection("server=(local);database=a0522183734;uid=a0522183734;pwd=bfcady");
- string sql = "insert imageStore(ImageData,ImageContentType,ImageDescription,ImageSize) values(@Image,@ContentType,@ImageDescription, @ImageSize)";
- SqlCommand sqlcom = new SqlCommand(sql, sqlconn);
- sqlcom.Parameters.AddWithValue("@Image", imageByteArray);
- sqlcom.Parameters.AddWithValue("@ContentType", Path.GetExtension(fuImage.PostedFile.FileName));//取得文件扩展名
- //取得文件名,不包含扩展名,实际应用中作为图片描述用
- sqlcom.Parameters.AddWithValue("@ImageDescription", Path.GetFileNameWithoutExtension(fuImage.PostedFile.FileName));
- sqlcom.Parameters.AddWithValue("@ImageSize", imageLength);
- sqlconn.Open();
- sqlcom.ExecuteNonQuery();
- sqlconn.Close();
- }
- protected void btnSubmit_Click(object sender, EventArgs e)
- {
- //改变图片的URL
- Image1.ImageUrl = "ReadImage.ashx?imgID=" + txtImageID.Text;
- }
- }
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.IO;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnUpload_Click(object sender, EventArgs e)
{
int imageLength = fuImage.PostedFile.ContentLength;//取得图片大小,以字节为单位
byte[] imageByteArray = new byte[imageLength]; //图片将临时存储在Byte(二进制)数组
Stream imageStream = fuImage.PostedFile.InputStream;//建立流对象
imageStream.Read(imageByteArray, 0, imageLength);//将图片读取到imageByteArray数组中,其中0为起始位置,imageLength为要读取的长度
//以下为数据库连接
SqlConnection sqlconn = new SqlConnection("server=(local);database=a0522183734;uid=a0522183734;pwd=bfcady");
string sql = "insert imageStore(ImageData,ImageContentType,ImageDescription,ImageSize) values(@Image,@ContentType,@ImageDescription, @ImageSize)";
SqlCommand sqlcom = new SqlCommand(sql, sqlconn);
sqlcom.Parameters.AddWithValue("@Image", imageByteArray);
sqlcom.Parameters.AddWithValue("@ContentType", Path.GetExtension(fuImage.PostedFile.FileName));//取得文件扩展名
//取得文件名,不包含扩展名,实际应用中作为图片描述用
sqlcom.Parameters.AddWithValue("@ImageDescription", Path.GetFileNameWithoutExtension(fuImage.PostedFile.FileName));
sqlcom.Parameters.AddWithValue("@ImageSize", imageLength);
sqlconn.Open();
sqlcom.ExecuteNonQuery();
sqlconn.Close();
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
//改变图片的URL
Image1.ImageUrl = "ReadImage.ashx?imgID=" + txtImageID.Text;
}
}
- 创建一般处理程序ReadImage.ashx,读取图片
-
- <%@ WebHandler Language="C#" Class="ReadImage" %>
- using System;
- using System.Web;
- using System.Data.SqlClient;
- public class ReadImage : IHttpHandler {
- public void ProcessRequest (HttpContext context) {
- string imgID = context.Request.QueryString["imgID"].ToString();
- SqlConnection sqlconn = new SqlConnection("server=(local);database=a0522183734;uid=a0522183734;pwd=bfcady");
- string sql = "select * from ImageStore where ImageID=" + imgID;
- SqlCommand sqlcom = new SqlCommand(sql, sqlconn);
- sqlconn.Open();
- SqlDataReader sqldr = sqlcom.ExecuteReader();
- if (sqldr.Read())//移到第一条记录,如果第一条记录不为空
- {
- context.Response.ContentType = (string)sqldr["ImageContentType"];//设置输出类型
- context.Response.OutputStream.Write((byte[])sqldr["ImageData"], 0, (int)sqldr["ImageSize"]);
- context.Response.End();
- }
- sqlconn.Close();
- }
- public bool IsReusable {
- get {
- return false;
- }
- }
- }
<%@ WebHandler Language="C#" Class="ReadImage" %> using System; using System.Web; using System.Data.SqlClient; public class ReadImage : IHttpHandler { public void ProcessRequest (HttpContext context) { string imgID = context.Request.QueryString["imgID"].ToString(); SqlConnection sqlconn = new SqlConnection("server=(local);database=a0522183734;uid=a0522183734;pwd=bfcady"); string sql = "select * from ImageStore where ImageID=" + imgID; SqlCommand sqlcom = new SqlCommand(sql, sqlconn); sqlconn.Open(); SqlDataReader sqldr = sqlcom.ExecuteReader(); if (sqldr.Read())//移到第一条记录,如果第一条记录不为空 { context.Response.ContentType = (string)sqldr["ImageContentType"];//设置输出类型 context.Response.OutputStream.Write((byte[])sqldr["ImageData"], 0, (int)sqldr["ImageSize"]); context.Response.End(); } sqlconn.Close(); } public bool IsReusable { get { return false; } } }
- 运行结果如下
upLoatImage.aspx
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="upLoadImage.aspx.cs" Inherits="upLoadImage" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title>无标题页</title>
- <style type="text/css">
- #File1
- {
- width: 206px;
- height: 25px;
- }
- #myUpLoadImage
- {
- margin-bottom: 0px;
- }
- </style>
- <script language="javascript" type="text/javascript">
- // <!CDATA[
- function File1_onclick() {
- }
- function myUpLoadImage_onclick() {
- }
- // ]]>
- </script>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- 排<asp:TextBox ID="rows" runat="server"></asp:TextBox>
- 层<asp:TextBox ID="floors" runat="server"></asp:TextBox>
- <br />
- 列<asp:TextBox ID="lines" runat="server"></asp:TextBox>
- 位<asp:TextBox ID="bits" runat="server"></asp:TextBox>
- <br />
- <asp:FileUpload ID="FileUpload1" runat="server" />
- <asp:Button ID="btnUpLoad" runat="server" Text="上传"
- onclick="btnUpLoad_Click" />
- <br />
- <asp:Label ID="Label1" runat="server" Text="上传完成" Width="200px" Visible="false"></asp:Label>
- <br />
- <asp:Image ID="Image1" runat="server" style="margin-left: 0px" Visible="false"/>
- </div>
- </form>
- </body>
- </html>
upLoadImage.aspx.cs
- using System;
- using System.Collections;
- using System.Configuration;
- using System.Data;
- using System.Linq;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Xml.Linq;
- using System.IO;
- using System.Data.SqlClient;
- public partial class upLoadImage : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- { }
- }
- protected void btnUpLoad_Click(object sender, EventArgs e)
- {
- HttpPostedFile upPhoto = FileUpload1.PostedFile;
- int upPhotoLength = upPhoto.ContentLength;
- byte[] PhotoArray = new Byte[upPhotoLength];
- Stream PhotoStream = upPhoto.InputStream;
- PhotoStream.Read(PhotoArray, 0,upPhotoLength);
- System.Drawing.Bitmap map = new System.Drawing.Bitmap(PhotoStream);
- //map.Save("~/dangquan.jpg");
- map.Save("F://WebSite2//dangquan.jpg");
- Label1.Visible = true;
- Image1.Visible = true;
- Image1.ImageUrl = "~/dangquan.jpg";
- int Row = int.Parse(rows.Text.Trim().ToString());
- int Floor = int.Parse(floors.Text.Trim().ToString());
- int Line = int.Parse(lines.Text.Trim().ToString());
- int Bit = int.Parse(bits.Text.Trim().ToString());
- string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnectionString"].ConnectionString;
- SqlConnection conn = new SqlConnection();
- conn.ConnectionString = connectionString;
- conn.Open();
- SqlCommand cmd = new SqlCommand("UpLoadImage", conn);
- cmd.CommandType = CommandType.Text;
- cmd.Parameters.Add("@image", SqlDbType.Image);
- cmd.Parameters["@image"].Value = PhotoArray;
- cmd.CommandText = string.Format("update storeinfo set image = @image where row = {0} and floor = {1} and line = {2} and bit ={3}",
- Row, Floor, Line, Bit);
- cmd.ExecuteNonQuery();
- cmd.Dispose();
- conn.Close();
- }
- }