将图片以二进制流的方式整体上传到数据库里,读取显示时,以二进制流的方式整体读出。这种方法虽然麻烦一点,但保存的图片整体到了数据库里。这样主机变更时不会导致图片丢失。
数据库:Wxqcs_User
字段:Photo Imgae null
上传页面源码:
<asp:FileUpload ID=”FileUpload1″ runat=server” /><br />
<asp:Button ID=”btnSubPhoto” runat=server” Text=”上传”
=”btnSubPhoto_Click” />
后置代码:
protected void btnSubPhoto_Click(object sender, EventArgs e)
{
int len = FileUpload1.PostedFile.ContentLength;//图片大小
string name = FileUpload1.PostedFile.FileName;
string type = name.Substring(name.LastIndexOf(“.”) + 1);
byte[] content = new byte[len];//创建一个字节组,大小为图片大小,数据库中就存储这个东西
FileUpload1.PostedFile.InputStream.Read(content, 0, len);
SqlConnection Con = new SqlConnection(ConfigurationManager.AppSettings["ConSql"]);
Con.Open();
SqlCommand cmd = Con.CreateCommand();
cmd.CommandText = “insert into Wxqcs_User (Photo) values (@content)”;
cmd.CommandType = CommandType.Text;
if (type == “jpg” || type == “gif” || type == “bmp” || type == “png”)
{
SqlParameter para = cmd.Parameters.Add(“@content”, SqlDbType.Image);
para.Value = content;
cmd.ExecuteNonQuery();
}
}
显示图片:
<asp:Image ID=”ShowPhoto” runat=server” Height=”132px” Width=”160px” />
ShowPhoto.ImageUrl = “Photo.aspx”;
Photo.aspx是由二进制编码生成的图片
CODE如下:
public partial class Photo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string imgid = Request.QueryString["imgid"];
SqlConnection conn1 = new SqlConnection(ConfigurationManager.AppSettings["ConSql"]);
SqlCommand cmd1 = new SqlCommand(“select Photo from Wxqcs_User where UserName=’” + Session["UserName"] + “‘”, conn1);
//固定显示Image_ID为3的图片
conn1.Open();
SqlDataReader sdr = cmd1.ExecuteReader();
if (sdr.Read())
{
Response.BinaryWrite((byte[])sdr["Photo"]);
}
Response.End();
}
}