您的位置:首页 > 数据库

将图片保存到数据库表中及从数据库表中读取图片并显示

2009-12-31 10:13 721 查看
一.页面文件.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PictureDeal.aspx.cs" Inherits="MyProject.PictureDeal" %>
<!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>
<input id="File1" runat=server type="file"/>  <asp:Button runat=server ID=btnUpFile
Text=UpFile onclick="btnUpFile_Click" />

  <asp:Button runat=server ID=btnDisplayPicture Text="DisplayPic"
onclick="btnDisplayPicture_Click" />

<br />

<img runat=server id=imgDisplay runat=server />
<asp:Label runat=server ID=lblMsg EnableViewState=false ></asp:Label>

<asp:Repeater runat=server ID=Rept >
<HeaderTemplate >
<table cellpadding=0 cellspacing=0 >
</HeaderTemplate>
<ItemTemplate >
<tr>
<td colspan=3 align=left ><%# Eval("ImageID") %></td>
</tr>

<tr >
<td style="border:solid 1px gray;"><%# Eval("ImageType")%></td>
<td style="border:solid 1px gray;"><%# Eval("ImageLength","{0:N}") %></td>
<td style="border:solid 1px gray;"><img src="HandlerPicture.ashx?ImageID=<%# Eval("ImageID") %>" height=100 width=200 /></td>
</tr>

<tr>
<td colspan=3><%# (Container.ItemIndex+1)%2==0 ? "<hr style='color:blue;' />" : String.Empty %> </td>
</tr>

</ItemTemplate>

<%-- <SeparatorTemplate>
<tr>
<td colspan=3 align=left ><hr style=" color:Red;" /></td>
</tr>
</SeparatorTemplate>--%>

<FooterTemplate>
<tr>
<td colspan =3><hr style="color:Red;" /></td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>

</div>
</form>

</body>
</html>
二.页面代码文件.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace MyProject
{
public partial class PictureDeal : System.Web.UI.Page
{
string strCon = System.Configuration.ConfigurationManager.AppSettings["ConnStr"].ToString();
protected void Page_Load(object sender, EventArgs e)
{
}
//上传图片并保存到数据库中
protected void btnUpFile_Click(object sender, EventArgs e)
{
string strJs = string.Empty;
if (File1.PostedFile.ContentLength > 0)
{
if (System.IO.Path.GetExtension(File1.PostedFile.FileName) == ".jpg")
{
//string strPath = Server.MapPath(@"~/File");
//strPath = System.IO.Path.Combine(strPath , System.IO.Path.GetFileName(File1.PostedFile.FileName));
//File1.PostedFile.SaveAs(strPath);

string strGuid=System.Guid.NewGuid().ToString();
try
{
using (SqlConnection sqlcon = new SqlConnection(strCon))
{
int intfileLength=File1.PostedFile.ContentLength;
string strfileType=File1.PostedFile.ContentType;
Stream fileStream = File1.PostedFile.InputStream;
byte[] imgBytes=new byte[intfileLength];
fileStream.Read(imgBytes,0,intfileLength);
SqlCommand sqlCmd = new SqlCommand("insert into tbImageFile(ImageID,ImageType,ImageContent,ImageLength) values (@ImageID,@ImageType,@ImageContent,@ImageLength)", sqlcon);
SqlParameter p1 = new SqlParameter("@ImageID", strGuid);
SqlParameter p2 = new SqlParameter("@ImageType", strfileType);
SqlParameter p3 = new SqlParameter("@ImageContent", imgBytes);
SqlParameter p4 = new SqlParameter("@ImageLength", intfileLength);
sqlCmd.Parameters.Add(p1);
sqlCmd.Parameters.Add(p2);
sqlCmd.Parameters.Add(p3);
sqlCmd.Parameters.Add(p4);
sqlcon.Open();
if (sqlCmd.ExecuteNonQuery() > 0)
{
imgDisplay.Src = "HandlerPicture.ashx?ImageID=" + strGuid;
lblMsg.Text = "<script language=javascript>alert('添加成功');</script>";
}
else
{
lblMsg.Text = "<script language=javascript>alert('添加失败');</script>";
}
fileStream.Dispose();
}

}
catch(Exception ex)
{
throw ex;
}
}
else
{
strJs = "<script language=javascript>alert('上传文件格式不正确');</script>";
lblMsg.Text = strJs;
}
}
else
{
strJs = "<script language=javascript>alert('请上传文件');</script>";
lblMsg.Text = strJs;
}
}
//显示图片信息
protected void btnDisplayPicture_Click(object sender, EventArgs e)
{
using (SqlConnection sqlCon = new SqlConnection(strCon))
{
SqlCommand sqlCmd = new SqlCommand("select ImageID,ImageContent,ImageLength,ImageType from tbImageFile", sqlCon);
sqlCon.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCmd);
DataSet myDs = new DataSet();
sqlDA.Fill(myDs);
if (myDs.Tables[0].Rows.Count > 0)
{
Rept.DataSource = myDs.Tables[0].DefaultView;
Rept.DataBind();

}

}
}

}
}
三.HandlerPicture.ashx 从数据库中读取图片并将二进制字符串写入http输出流.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace MyProject
{
/// <summary>
/// 从数据库中获取图片内容.
/// </summary>
public class HandlerPicture : IHttpHandler
{
string strCon = System.Configuration.ConfigurationManager.AppSettings["ConnStr"];
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpg";
string strGuid = context.Request.QueryString["ImageID"].ToString();
using(SqlConnection sqlCon=new SqlConnection(strCon))
{
SqlCommand sqlCmd = new SqlCommand("select ImageContent from tbImageFile where ImageID=@ImageID", sqlCon);
SqlParameter p1 = new SqlParameter("@ImageID", strGuid);
sqlCmd.Parameters.Add(p1);
sqlCon.Open();
byte[] bytes=(byte[])sqlCmd.ExecuteScalar();
context.Response.BinaryWrite(bytes);
}
}
public bool IsReusable
{
get
{
return true;
}
}
}
}
注:在web.config 文件的 <httpHandlers>节中加入如下行,用于指定该文件HandlerPicture.ashx由MyProject.HandlerPicture来处理.
<add verb="*" path="HandlerPicture.ashx" type="MyProject.HandlerPicture"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐