`
jiasongmao
  • 浏览: 661166 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

图片上传到数据库的总结

    博客分类:
  • .NET
阅读更多

本文转载于:http://www.cnblogs.com/interboy/archive/2007/04/12/710024.html

 

转眼间在博客园里待了快一年了,我还能记得去年的这个时候老师有个项目,在这个项目里需要把图片保存到数据库里,以前我做的就是把路径保存到数据库,后来为了实现这个功能我可是费了不少劲啊,问东问西的最后还是在CSDN网友的帮助下完成了。今天晚上又有CSDN网友提问有关图片保存到数据库的问题。下面我来汇总一下如何将图片保存到SqlServer、Oracle、Access数据库中。
         首先,我们要明白图片是以二进制的形式保存在数据库中的,那么把图片保存到数据库中的步骤大体上有这几步
1.将图片转换为二进制数组(byte[]);
2.把转换后的二进制数组(byte[])作为参数传递给要执行的Command;
3.执行Command;

      首先,如何把图片转换成byte[],如果你使用的是ASP.Net2.0,那么你可以使用FileUpLoad控件来实现
byte[] fileData = this.FileUpload1.FileBytes;
如果你用的是ASP.Net1.1或者你在创建WinForm那么你可以使用下面的方法来把图片转换为byte[]

public byte[] getBytes(string filePath)
{
    System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open);
    byte[] imgData = new byte[fs.Length];
    fs.Read(imgData, 0, (int)fs.Length);
    return imgData;
}

 接下来我们要做的就是要把已经得到的byte[]作为参数传递给Command对象

1.SqlServer数据库。SqlServer有Image字段类型,最大可以存储2G的数据。

 

 

byte[] fileData = this.FileUpload1.FileBytes;

string sql = "insert into t_img(img) values (@img)";
string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["fengdongDB"].ToString();
SqlConnection sqlConn = new SqlConnection(strconn);
SqlCommand sqlComm = new SqlCommand(sql, sqlConn);
sqlComm.Parameters.Add("@img", SqlDbType.Image);//添加参数
sqlComm.Parameters["@img"].Value = fileData;//为参数赋值

sqlConn.Open();
sqlComm.ExecuteNonQuery();
sqlConn.Close();

 

2.Oracle数据库。在Oracle数据库中我们可以使用BLOB字段类型,最大可以存储4G的数据。

byte[] fileData = this.FileUpload1.FileBytes;

string sql = "insert into t_img(imgid,IMGDATA) values(100,:IMGDATA)";
string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringForOracle"].ToString();
OracleConnection oraConn = new OracleConnection(strconn);
OracleCommand oraComm = new OracleCommand(sql, oraConn);
oraComm.Parameters.Add(":IMGDATA", OracleType.Blob);//添加参数
oraComm.Parameters[":IMGDATA"].Value = fileData;//为参数赋值

oraConn.Open();
oraComm.ExecuteNonQuery();
oraConn.Close();

 

注意:这里我需要说明一下,用Oracle的专用连接传递参数的时候你要小心一点,看看上面的SQL语句你就会知道,要在参数名前加个“:”否则就会出现下面的错误“OracleException:   ORA-01036:   非法的变量名/编号”。这里需要我们注意一下。另外还有一个地方,当我引用System.Data.OracleClient命名空间的时候默认是没有的,必须添加对System.Data.OracleClient的引用,我记得在VS2003下如果安装了OracleClient是不用添加引用就可以引入的。这里也要留意一下。

3.Access数据库。在Access中我们使用OLE对象字段类型,最大支持1G的数据。

byte[] fileData = this.FileUpload1.FileBytes;

string sql = "insert into t_img(IMGDATA) values(?)";
string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringForAccess"].ToString();

OleDbConnection oleConn = new OleDbConnection(strconn);
OleDbCommand oleComm = new OleDbCommand(sql, oleConn);
oleComm.Parameters.Add("imgdata", OleDbType.Binary);
oleComm.Parameters["imgdata"].Value = fileData;

oleConn.Open();
oleComm.ExecuteNonQuery();
oleConn.Close();

 

好了,到这里我们就把图片保存到数据库中全部说完了,接下来要说的是如何从数据库中把图片读取出来。实际上这是与插入操做相反的一个过程:先报把从数据库中获取的图片数据转换为数组,然后把数组转换为图片。不同数据之间没有特别大的差异,我这里只列出从Oracle数据库中把数据读取出来以供参考。

 

private byte[] getImageDataFromOracle()
{
    string sql = "select IMGDATA from t_img where imgID=100";
    string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringForOracle"].ToString();
    OracleConnection oraConn = new OracleConnection(strconn);
    OracleCommand oraComm = new OracleCommand(sql, oraConn);

    oraConn.Open();
    byte[] fileData = (byte[])oraComm.ExecuteScalar();
    oraConn.Close();

    return fileData;
}

 

我们获取到了数据,那么把byte[]转换为图片的过程都是一样的。

private System.Drawing.Image convertByteToImg(byte[] imgData)
{
    System.IO.MemoryStream ms = new System.IO.MemoryStream(imgData);
    System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
    return img;
}

 

如果你在开发WinForm应用的话你可以直接把返回结果保存或者显示到PictureBox里,如果你在使用ASP.Net那么你可以在单独的一个页面把图片输出,在另外一个页面把Image控件的ImageUrl属性指向图片输出页面。
比如输出页面getImg.aspx的代码

protected void Page_Load(object sender, EventArgs e)
{
    string sql = "select IMGDATA from t_img where imgID=100";
    string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringForOracle"].ToString();
    OracleConnection oraConn = new OracleConnection(strconn);
    OracleCommand oraComm = new OracleCommand(sql, oraConn);

    oraConn.Open();
    byte[] fileData = (byte[])oraComm.ExecuteScalar();
    oraConn.Close();

    System.IO.MemoryStream ms = new System.IO.MemoryStream(fileData);
    System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
    img.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}

 

 

 

分享到:
评论

相关推荐

    Jsp图片上传资料并将图片路径上传至数据库

    总结,实现"Jsp图片上传资料并将图片路径上传至数据库"的过程涉及前端表单设计、后端文件处理、数据库操作、异常管理和安全措施。通过合理的设计和编程,可以构建一个高效、安全的图片上传系统。

    如何将图片上传到数据库中

    本文将深入探讨如何将图片上传至数据库以及如何从数据库中检索并显示这些图片,以实现高效的数据管理和用户友好的界面展示。 ### 图片上传至数据库 #### 1. 数据库结构设计 在将图片上传至数据库前,首先需要设计...

    php上传图片到数据库.zip

    在PHP中将图片上传到数据库是一项常见的任务,尤其在构建Web应用时,如社交媒体平台、电商网站等。这里我们将深入探讨实现这一功能的关键步骤、涉及的技术以及提供的文件用途。 首先,`index.html`是用户界面的入口...

    SSM(Spring+SpringMvc+Mybatis)图片上传保存到数据库与回显+sql

    总结来说,这个项目实例了SSM框架下图片上传和回显的完整流程,涉及前后端交互、文件操作、数据库操作和安全防护等多个方面,对于理解SSM框架的应用和Web开发中的文件上传有很好的实践意义。通过学习和实践这个案例...

    二进制图片上传到数据库

    总结起来,二进制图片上传涉及的关键技术点包括图片二进制转换、数据库操作(特别是二进制数据类型的使用)以及数据的恢复与读取。在实际开发中,需要根据项目需求和资源状况选择合适的存储方案。

    django将图片上传数据库后在前端显式的方法

    在Web开发中,尤其是使用Django框架时,将图片上传到服务器并通过数据库进行管理是常见的需求。本文将详细讲解如何使用Django框架实现图片的上传、存储到数据库以及在前端页面的展示。涉及的知识点包括Django模型...

    ASP上传图片到指定文件夹,并保存图片信息到数据库

    总结,ASP实现图片上传到指定文件夹并保存图片信息到数据库的过程包括:创建HTML表单,处理ASP请求,保存文件到服务器,读取文件信息,以及将信息插入数据库。这个过程需要注意安全性和性能优化,以提供稳定且安全的...

    Java+mysql本地图片上传数据库及下载示例

    在Java编程中,将本地图片上传到MySQL数据库以及从数据库下载图片是一项常见的任务,尤其在构建Web应用时。本文将详细解析如何实现这个过程,并基于给出的代码进行讲解。 首先,我们需要在数据库中创建一个用于存储...

    C# 上传图片到数据库,并从数据库中读取出来,简单的图片浏览器

    在C#编程中,将图片上传到数据库以及从数据库中读取图片是常见的操作,尤其在构建具有图像存储功能的应用程序时。以下是一份详细的知识点解析,涵盖了这个过程的关键步骤和技术。 首先,我们需要理解数据库如何存储...

    文件上传到数据库

    本示例中,我们探讨的是如何通过TCP的Socket通信将图片上传至MySQL数据库,同时涉及了基本的IO字符流读写以及数据库的查询与插入操作。下面将详细阐述这些知识点。 首先,TCP(Transmission Control Protocol)是一...

    图片上传数据库和从数据库啊把图片取出来

    总结,图片上传到数据库并从数据库取出涉及的IT知识点涵盖了文件处理、数据库操作、前端交互、安全性、性能优化等多个方面。在实际开发中,要综合考虑这些因素,以提供高效、安全、用户体验良好的服务。

    .net图片上传数据库

    总结来说,将图片上传到SQL Server并在网页上显示和下载涉及以下几个步骤: 1. 使用`HttpPostedFileBase`处理文件上传。 2. 将图片数据转换为字节数组,存储在数据库的VARBINARY(MAX)字段中。 3. 创建服务器端方法以...

    如何将图片保存到数据库

    将图片保存到数据库及从数据库读取图片是一项基本但重要的技能,尤其在Web应用和移动应用中,当需要存储用户上传的图片时尤为常见。理解其背后的原理和具体实现步骤,对于提高应用的性能和安全性都至关重要。在实际...

    用FileUpload控件上传文件到数据库

    Page.RegisterStartupScript("error", "<script>alert('图片上传失败,!"+ ex.Message.ToString() + "');</script>"); // 显示错误提示 } } else { Page.RegisterStartupScript("error", "<script>alert('图片...

    vb.net做的图片存储到SQL数据库

    总结,VB.NET将图片存储到SQL数据库涉及到以下关键知识点: 1. BLOB类型:理解如何在SQL数据库中存储二进制数据。 2. ADO.NET:使用VB.NET连接和操作SQL数据库。 3. 参数化查询:防止SQL注入,提高代码安全性。 4. ...

    图片怎么存储到数据库,

    3. **图片上传到数据库**: 创建一个表单或者API接口接收图片数据。用户上传图片后,后台程序接收到图片的二进制数据,然后通过SQL语句(如`INSERT INTO`)插入到数据库的相应字段中。 4. **图片从数据库读取**: ...

    无组件图片上传数据库储存版

    总结来说,"无组件图片上传数据库储存版"是一种简洁、高效的图片上传解决方案,特别适合处理小图片。它利用二进制存储和数据库储存模式,提供了统一的管理和快速访问,同时降低了对前端资源的需求。如果你在开发一个...

    上传文件至数据库并下载

    总结来说,上传文件到数据库和下载的过程主要涉及以下几点: 1. 数据库表设计,包括选择合适的二进制数据类型字段。 2. 使用前端文件上传控件,以二进制形式上传文件,并保存在数据库中。 3. 制作报表模板,包括...

Global site tag (gtag.js) - Google Analytics