zoukankan      html  css  js  c++  java
  • ASP.NET中存取图片到数据库的示例

    //开发环境:Window 2000、SQLServer2000、.Net Framework SDK正式版
    //开发语言:C#、ASP.Net
    //简介:数据库中图片存蓄及读取
    //作者:engine
    /*
    说 明:在ASP中,我们用Request.TotalBytes、Request.BinaryRead()来上传图片,这个可恶的 BinaryRead()方法非常笨,单个文件上传倒没什么大事,单如果多个图片上专可就花大气力了…!而现在ASP.Net中将会把解决以前ASP中文 件上传的种种问题,使你在ASP.Net中轻轻松松开发出功能强大的上传程序,下面大家看看例子啦。
    */
    //注意:由于作者水平有限,错误是难免的,如发现错误请指教
    //Email:e_engine@21cn.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]
    */

    //UpLoadImage.aspx程序内容如下:
    <%@ Page Inherits="UploadImage.UploadImage" SRC="UpLoadImage.cs" Language="C#"%>
    <HTML><title>上传图片</title>
    <BODY bgcolor="#FFFFFF">
    <FORM ENCTYPE="multipart/form-data" RUNAT="server" ID="Form1">
    <TABLE RUNAT="server" WIDTH="700" ALIGN="left" ID="Table1" cellpadding="0" cellspacing="0" border="0">
    <TR>
         <TD>上传图片(选择你要上传的图片)</TD>
    <TD>
    <INPUT TYPE="file" ID="UP_FILE" RUNAT="server" STYLE="Width:320" ACCEPT="text/*" NAME="UP_FILE">
    </TD>
    </TR>
    <TR>
         <TD>
          文件说明(添加上传图片说明,如:作者、出处)
         </TD>
    <TD>
    <asp:TextBox RUNAT="server" WIDTH="239" ID="txtDescription" MAINTAINSTATE="false" />
    </TD>
    </TR>
    <TR>
    <TD>
    <asp:Label RUNAT="server" ID="txtMessage" FORECOLOR="red" MAINTAINSTATE="false" />
    </TD>
    <TD>
    <asp:Button RUNAT="server" WIDTH="239" ONCLICK="Button_Submit" TEXT="Upload Image" />
    </TD>
    </TR>
    </TABLE>
    </FORM>
    </BODY>
    </HTML>
    //-------------------------------------------------------------------
    //UpLoadImage.cs程序内容如下:
    using System;
    using System.Web;
    using System.IO;
    using System.Data;
    using System.Data.SqlClient;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    namespace UploadImage
    {
    public class UploadImage : Page {
    protected HtmlInputFile UP_FILE;          //HtmlControl、WebControls控件对象
    protected TextBox txtDescription;
    protected Label txtMessage;
    protected Int32 FileLength = 0;          //记录文件长度变量
    protected void Button_Submit(System.Object sender, System.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=testdb;User ID=sa;Pwd=;");
    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();

    }}}}

    //----------------------------------------------------------------------
    //好了,图片已经上传到数据库,现在还要干什么呢?当然是在数据库中读取及显示在Web页中啦,请看以下程序:
    //ReadImage.aspx程序内容如下:
    /-----------------------------------------------------------------------
    <%@ Page Inherits="ReadImage.MainDisplay" SRC="ReadImage.cs"%>
    //----------------------------------------------------------------------
    //ReadImage.cs程序内容如下:
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    namespace ReadImage {
    public class MainDisplay : System.Web.UI.Page {
    public void Page_Load(System.Object sender, System.EventArgs e) {
        int ImgID = Convert.ToInt32(Request.QueryString["ImgID"]);  //ImgID为图片ID
        //建立数据库链接
        SqlConnection Con = new SqlConnection("Data Source=KING;Initial Catalog=testdb;User ID=sa;Pwd=;");
        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"];//设定输出文件类型
        //输出图象文件二进制数制
        Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]);    
        Response.End();
        Con.Close();
        //很简单吧^_^
     }
    }
    }
    //--------------------------------------------------------------------
    //最后,我们当然要把它在Web页面显示出来啦
    //ShowImage.hml
    <html>
    <body>
    这个是从数据库读取出来的图象:<img src="ReadImage.aspx?ImgID=1">
    <body>
    </html>
    //------------------------------------------------------------------
    //最后,这程序当然还很多改进之处,希望大家多想想多编编一定可以写出更多的图象上传程序
    //Good Luck,engine

  • 相关阅读:
    hdu acm 2844 Coins 解题报告
    hdu 1963 Investment 解题报告
    codeforces 454B. Little Pony and Sort by Shift 解题报告
    广大暑假训练1 E题 Paid Roads(poj 3411) 解题报告
    hdu acm 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
    hdu acm 1114 Piggy-Bank 解题报告
    poj 2531 Network Saboteur 解题报告
    数据库范式
    ngnix 配置CI框架 与 CI的简单使用
    Vundle的安装
  • 原文地址:https://www.cnblogs.com/longyi/p/1459792.html
Copyright © 2011-2022 走看看