C# 将图片的base64编码保存到Oracle数据库中

在Oracle中处理文件存储的方式是使用它自身的称为Orcale大对象内的类型也就是Oracle LOB 大对象

LOB对象有4种类型分别为:

  1. blob:二进制lob,为二进制数据,最长可达4GB,存贮在数据库中。
  2. clob:字符lob,字符数据,最长可以达到4GB,存贮在数据库中。
  3. bfile:二进制文件;存贮在数据库之外的只读型二进制数据,最大长度由操作系统限制。
  4. 支持对字节字符集合(nultibyte characterset)的一个clob列。

由于要存储图片可以使用blob将图片保存为二进制格式,在这里本人使用了clob类型保存了图片的base64编码。

在保存过程中遇到的最大难题是如何将图片的base64编码保存进数据库的clob类型字段上。在这里提供一种方案,可能并不是绝对的,只是本人用它实现了这个功能。

需要在程序中导入操作Oracle数据库的名称空间,这里用的是System.Data.OracleClient,它的程序集是System.Data.OracleClient

先在数据库中创建一个存储表

create clob_table(
clob_id number(2) primary key not null,
clob_pic clob not null
)
然后执行C#代码 关键代码如下

string execSql="insert into clob_table(clob_id,) values(1,:clob_pic);"
这里使用参数化查询的方式 为了可以在为“OracleCommand” 添加参数时方便 使用了数组 关键代码如下

OracleParameter[] parameter = new OracleParameter[] { new OracleParameter(":clob_pic", OracleType.Clob) };
parameter[0].Value = 要保存的值;
如果是要查询的话

使用DataTable真接取值即可如

 dt.Rows[0]["CLOB_PIC"]
 另外

由于数据库图片存储采用的是base64编码 所以在显示图片的时候要将图片输出到浏览器流中

本人采用的是页面标签的src属性链接到一个一般处理程序,由这个一般处理程序来进行浏览器端的图片流输出(这有点类型于 验证码) 关键代码如下

 string base64Str =获得数据库中存储的图片转码值
            byte[] buffurPic = Convert.FromBase64String(base64Str);//获得byte数组值
            context.Response.ContentType = "image/jpeg";//设置输出流类型
            context.Response.Clear();
            context.Response.BufferOutput = true;
            context.Response.OutputStream.Write(buffurPic, 0, buffurPic.Length);
            context.Response.Flush();
这里如果存储的是二进制那么不需要转换格式直接输出

图片转二进制 代码如下

 FileStream fs = new FileStream(图片路径, FileMode.Open, FileAccess.Read);
 byte[] buffur = new byte[fs.Length];
 fs.Read(buffur, 0, (int)fs.Length);

其中buffur即为转换的二进制编码

图片转base64 过程是先将图片转成二进制然后再转base64 代码如下

  FileStream fs = new FileStream(图片路径, FileMode.Open, FileAccess.Read);
  byte[] buffur = new byte[fs.Length];
  fs.Read(buffur, 0, (int)fs.Length);
  string base64Str = Convert.ToBase64String(buffur);
其中base64Str即为转换的base64编码。

注:部分参考其他文章









你可能感兴趣的:(asp.net)