• ASP.NET中存取图片到数据库的示例(C#)


    ASP.NET中存取图片到数据库的示例(C#)
    //开发环境:Window 2003、SQLServer2000、.Net 2.0
    //开发语言:C#、ASP.Net
    //简介:图片预览,数据库中图片存储及读取
    //作者:wayne-ivan
    //Email:wayne-ivan@163.com
    /*
    首先在SQL Server中建立一个图片存储的数库表,ImageData Column为图象二进制数据储存字段,ImageContentType Column为图象文件类型记录字段,ImageDescription Column为储蓄图象文件说明字段,ImageSize Column为储存图象文件长度字段,结构如下:
    Create TABLE [dbo].[ImageStore] (
        [ImageID] [int] IDENTITY (1, 1) NOT NULL ,
        [ImageData] [image] NULL ,                            
        [ImageContentType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
        [ImageDescription] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
        [ImageSize] [int] NULL
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    */


    //PreviewAndSave.aspx 页面如下
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="PreviewAndSave.aspx.cs" Inherits="_PreviewAndSave" %>
    <!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>
    <script language="javascript" type="text/javascript">
        function preview()
        {
            var x = document.getElementById("file4");
            //var y = document.getElementById("Image1");
            var z = document.getElementById("Image2");
            if(!x || !x.value || !z)
                return;
             var patn = /\.jpg$|\.jpeg$|\.gif$/i;
             if(patn.test(x.value))
             {  
                //y.src = "file://localhost/" + x.value;
                z.src = "file://localhost/" + x.value;
             }
             else
             {  
                    alert("您选择的似乎不是图像文件。");
              }
        }
    </script>
    </head>
    <body id="UP_FILEa">
        <form id="form1" runat="server">
        <div>
            &nbsp;<asp:Image ID="Image1" runat="server" Height="174px" Width="159px" />
            <input id="UP_FILE" runat="server" type="file" onpropertychange="document.all.Image1.src='file:///'+this.value"/>
            <br />
            <asp:Image ID="Image2" runat="server" Height="174px" Width="159px" />
            <input type="file" name="file4" id="file4" onchange="preview()" /> <br />
            <asp:TextBox ID="txtDescription" runat="server" Visible="False"></asp:TextBox>&nbsp;
            <asp:Label ID="txtMessage" runat="server" Text="Label" Visible="False"></asp:Label>&nbsp;
            <asp:Button ID="BtnSave" runat="server" OnClick="Button1_Click" Text="上传" />
            &nbsp;
            <asp:Button ID="BtnRead" runat="server" OnClick="Button3_Click" Text="读取" />&nbsp;
            <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="读取到另一个页面" Visible="False" /> <br/>
            <asp:RadioButtonList ID="RadioButtonList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged">
            </asp:RadioButtonList></div>
        </form>
    </body>
    </html>





    //PreviewAndSave.aspx.cs 如下
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using System.IO;


    public partial class _PreviewAndSave : System.Web.UI.Page
    {
        protected Int32 FileLength = 0;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                bindRadioList();

            }
        }
        private void bindRadioList()
        {
            DataTable dt = new DataTable();
            string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
            SqlConnection Con = new SqlConnection(strCon);
            Con.Open();
            SqlDataAdapter da = new SqlDataAdapter("select ImageID from ImageStore", Con);
            da.Fill(dt);
            RadioButtonList1.DataTextField = "ImageID";
            RadioButtonList1.DataValueField = "ImageID";
            RadioButtonList1.DataSource = dt;
            RadioButtonList1.DataBind();
            if (dt.Rows.Count > 0)
                RadioButtonList1.SelectedIndex = 0;

        }
        //保存图片到数据库
        protected void Button1_Click(object sender, EventArgs e)
        {
            HttpPostedFile UpFile = UP_FILE.PostedFile; //HttpPostedFile对象,用于读取图象文件属性
            FileLength = UpFile.ContentLength;     //记录文件长度
            try
            {
                if (FileLength == 0)
                {   //文件长度为零时
                    txtMessage.Text = "<b>请你选择你要上传的文件</b>";
                }
                else
                {
                    Byte[] FileByteArray = new Byte[FileLength];   //图象文件临时储存Byte数组
                    Stream StreamObject = UpFile.InputStream;      //建立数据流对像
                    //读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
                    StreamObject.Read(FileByteArray, 0, FileLength);
                    //建立SQL Server链接
                    SqlConnection Con = new SqlConnection("Data Source=Localhost;Initial Catalog=ghrmsdb;User ID=sa;Pwd=sa;");
                    String SqlCmd = "Insert INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";
                    SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
                    CmdObj.Parameters.Add("@Image", SqlDbType.Binary, FileLength).Value = FileByteArray;
                    CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar, 50).Value = UpFile.ContentType; //记录文件类型
                    //把其它单表数据记录上传
                    CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar, 200).Value = txtDescription.Text;
                    //记录文件长度,读取时使用
                    CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt, 8).Value = UpFile.ContentLength;
                    Con.Open();
                    CmdObj.ExecuteNonQuery();
                    Con.Close();
                    txtMessage.Text = "<p><b>OK!你已经成功上传你的图片</b>";//提示上传成功
                }
            }
            catch (Exception ex)
            {
                txtMessage.Text = ex.Message.ToString();
            }
            //Response.Redirect("ReadImage.aspx?id=1");
            bindRadioList();
        }
        
        protected void Button3_Click(object sender, EventArgs e)
        {
            //int ImgID = Convert.ToInt32(Request.QueryString["ID"]); //ID为图片ID
            int ImgID = Convert.ToInt32(RadioButtonList1.SelectedValue);
            //建立数据库链接
            string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
            SqlConnection Con = new SqlConnection(strCon);

            String SqlCmd = "Select * FROM ImageStore Where ImageID = @ImageID";
            SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
            CmdObj.Parameters.Add("@ImageID", SqlDbType.Int).Value = ImgID;
            Con.Open();
            SqlDataReader SqlReader = CmdObj.ExecuteReader();
            SqlReader.Read();
           // Response.ContentType = (string)SqlReader["ImageContentType"];//设定输出文件类型
            string fileName = Server.MapPath(this.Request.ApplicationPath) + "\\" + ImgID + ".jpg";// + "\\1.jpg";
            System.IO.File.WriteAllBytes(fileName, (byte[])SqlReader["ImageData"]);
            this.Image1.ImageUrl = this.Request.ApplicationPath + "/" + ImgID + ".jpg";
            
            //输出图象文件二进制数制
            //Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]);
            //Response.End();
            //也可以保存为图像
            //      FileStream fs = new FileStream(@"C:\aa.BMP", FileMode.OpenOrCreate, FileAccess.Write);
            //      fs.Write((byte[])SqlReader["ImageData"], 0,(int)SqlReader["ImageSize"]);
            //      fs.Close();

            Con.Close();
        }
        protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            ReadPicutre();
        }

        //从数据库中读取文件显示出来
        private void ReadPicutre()
        {
            int ImgID = Convert.ToInt32(RadioButtonList1.SelectedValue);
            //建立数据库链接
            string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
            SqlConnection Con = new SqlConnection(strCon);

            String SqlCmd = "Select * FROM ImageStore Where ImageID = @ImageID";
            SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
            CmdObj.Parameters.Add("@ImageID", SqlDbType.Int).Value = ImgID;
            Con.Open();
            SqlDataReader SqlReader = CmdObj.ExecuteReader();
            SqlReader.Read();
            // Response.ContentType = (string)SqlReader["ImageContentType"];//设定输出文件类型

            //将文件保存到文件夹,然后在读取
            string fileName = Server.MapPath(this.Request.ApplicationPath) + "\\" + ImgID + ".jpg";// + "\\1.jpg";
            System.IO.File.WriteAllBytes(fileName, (byte[])SqlReader["ImageData"]);
            this.Image1.ImageUrl = this.Request.ApplicationPath + "/" + ImgID + ".jpg";

            //输出图象文件二进制数制
            //Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]);
            //Response.End();
            //也可以保存为图像
            //      FileStream fs = new FileStream(@"C:\aa.BMP", FileMode.OpenOrCreate, FileAccess.Write);
            //      fs.Write((byte[])SqlReader["ImageData"], 0,(int)SqlReader["ImageSize"]);
            //      fs.Close();

            Con.Close();
        }
        //在新打开的页面显示图片
        protected void Button2_Click(object sender, EventArgs e)
        {
            //得到用户要上传的文件名
            string strFilePathName = UP_FILE.PostedFile.FileName;
            string strFileName = Path.GetFileName(strFilePathName);
            int FileLength = UP_FILE.PostedFile.ContentLength;
            if (FileLength <= 0)
                return;
            try
            {//上传文件
                Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组
                Stream StreamObject = UP_FILE.PostedFile.InputStream; //建立数据流对像
                //读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
                StreamObject.Read(FileByteArray, 0, FileLength);
                //建立SQL Server链接
                string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
                SqlConnection Con = new SqlConnection(strCon);
                // String SqlCmd = "Insert INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";
                String SqlCmd = "Insert INTO ImageStore (ImageData) VALUES (@Image)";
                SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
                CmdObj.Parameters.Add("@Image", SqlDbType.Binary, FileLength).Value = FileByteArray;
                CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar, 50).Value = UP_FILE.PostedFile.ContentType; //记录文件类型
                //把其它单表数据记录上传
                CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar, 200).Value = txtDescription.Text;
                //记录文件长度,读取时使用
                CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt, 8).Value = FileLength;
                Con.Open();
                CmdObj.ExecuteNonQuery();
                Con.Close();
                //跳转页面
                Response.Redirect("ReadImage.aspx?id=1");
            }
            catch
            {
            }
        }
    }

  • 相关阅读:
    深入探讨this指针
    杂谈:你选择coco 还是unity3d?
    一分钟制作U盘版BT3
    【转载】ShowWindow函数
    hadoop备记
    OA系统权限管理设计(转载)
    二叉树的存储与遍历
    这难道是CSDN的BUG? 大家帮忙看看哪里有问题
    Cookie 操作工具类
    Java实现 蓝桥杯VIP 算法训练 数的统计
  • 原文地址:https://www.cnblogs.com/sontin/p/1929792.html
Copyright © 2020-2023  润新知