Asp.Net 保存图片或读取图片从Oracle数据库

本文介绍如何使用ASPX页面上传图片到Oracle数据库,并实现图片的读取。通过具体代码示例,详细展示了创建数据库表、利用FileUpload控件上传图片、保存图片到数据库以及从数据库读取图片的过程。

1、在TOAD或SQLPlus中创建一下数据库表。


1CREATE TABLE TEST_TABLE
2(
3  ID     VARCHAR2(36 BYTE),
4  NAME   VARCHAR2(50 BYTE),
5  PHOTO  BLOB
6)
7

2、新建一个ASPX页面,在页面上放一个FileUpload控件,命名为fileUp,放置两个按钮分布为btnSave(保存),btnRead(读取)。
3、在btnSave的事件中执行一下代码,用来保存图片或文件:

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Data.OracleClient;
using System.IO;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
    string strCn="Data Source=dev.liteon;User Id=dev1;Password=dev111;Integrated Security=no;";

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnSave_Click(object sender, EventArgs e)
    {
        StringBuilder sbSQL = new StringBuilder("insert into Test_Table(ID,Name,Photo) values(:ID,:Name,:Photo)");
        OracleConnection cn = new OracleConnection(strCn);
        OracleCommand cmd = cn.CreateCommand();
        cmd.CommandText = sbSQL.ToString();
        cmd.Parameters.Add(":ID", OracleType.VarChar, 36).Value = Guid.NewGuid().ToString();
        cmd.Parameters.Add(":Name", OracleType.VarChar, 50).Value = fileUp.FileName;
        int intLen = fileUp.PostedFile.ContentLength;
        byte[] pic = new byte[intLen];
        fileUp.PostedFile.InputStream.Read(pic, 0, intLen);
        cmd.Parameters.Add(":Photo", OracleType.Blob).Value = pic;
        try
        {
            cn.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        finally
        {
            cn.Close();
        }
    }
    protected void btnRead_Click(object sender, EventArgs e)
    {
        OracleConnection cn = new OracleConnection(strCn);
        OracleCommand cmd = cn.CreateCommand();
        cmd.CommandText = "select photo from test_table";
        try
        {
            cn.Open();
            MemoryStream stream = new MemoryStream();
            IDataReader reader = cmd.ExecuteReader();
            if (reader.Read())
            {
                byte[] pic = (byte[])reader[0];
                //byte[] pic = (byte[])cmd.ExecuteScalar();
                stream.Write(pic, 0, pic.Length);

                //注释部分能够将图片显示在IE中,而不是下载图片
                //Bitmap bitMap = new Bitmap(stream);
                //Response.ContentType = "image/Jpeg";
                //bitMap.Save(Response.OutputStream, ImageFormat.Jpeg);
               
                //下面的要领直接下载文件 
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment;FileName= demo.JPG");
                Response.BinaryWrite(pic);
               
                //Response.End導致“由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值”的解决方法
                HttpContext.Current.ApplicationInstance.CompleteRequest();
                //Response.End();
            }
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        finally
        {
            cn.Close();
        }
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值