ASP.NET数据库存取图片的方法

当我们有大量的图片或者图片比较大时,我们常规的做法可能是保存图片路径,但是也不排除需要将图片直接存放到数据库的情况,此时就需要保存图片到数据库了。这篇文章我会向大家介绍:

如何通过FileUpLoad控件将图片保存到数据库
如何通过Button控件从数据库导出图片

具体步骤如下:

保存图片到数据库

第一步:首先在数据库创建一个名为“Images”的表,代码如下:

CREATE TABLE Images
(
Roll_no varchar(12) primary key,
Name_File varchar(100),
Extension varchar(100) ,
img varbinary(max) ,
Img_date datetime
)

可以看到这个表存储了这些内容:图片的登记号、文件名、文件扩展名、二进制数据以及上传时间。

第二步:然后打开Visual Studio,创建一个空网站,命名为”ImageToBinary”。

第三步:再添加一个新页面,命名为“Conversion.aspx”

在这个页面我们拖进TextBox , FileUpload, Button这三个控件。

界面如图:

当然你也可以选择在Conversion.apsx文件直接输入这串代码:

文件序号
<asp:TextBox ID="txtrollno" runat="server">
</asp:TextBox>
<br />

选择文件
<asp:FileUpload ID="FileUpload1" runat="server" />
<br />

<asp:Button ID="Button1" runat="server"
Text="上传" OnClick="Button1_Click" />

第四步:控件添加后,双击Button,进入Conversion.apxs.cs文件,添加以下命名空间:

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web;

然后在Button1_Click内编写代码,将图片转换为二进制流并通过SQL语句保存到数据库中。

代码如下:

protected void Button1_Click(object sender, EventArgs e)
{
 if (!FileUpload1.HasFile)
  {
  Response.Write("未选择文件");
  return;
  }

  else
  {
  //创建访问上传文件的对象,并获取上传的文件
  HttpPostedFile file = FileUpload1.PostedFile;

  //获取上传文件的文件名和扩展名
  string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
  string extension = Path.GetExtension(filename); 

  //实例化一个byte数组,其长度等于上传文件的长度
  byte[] imagetype = new byte[file.ContentLength];

  //将文件数据读取到byte数组中
  file.InputStream.Read(imagetype, 0, file.ContentLength); 

  //判断图片格式
  if ((extension == ".jpg") || (extension == ".png") || (extension == ".gif") || (extension == ".bmp"))
  {
   //表里写入数据
   using (SqlConnection connection = new SqlConnection("Data Source=AFOD3-609221015;Initial Catalog=MyData;Integrated Security=True"))
   {

   connection.Open();
   SqlCommand cmd = new SqlCommand();
   cmd.Connection = connection;

   string commandText = "Insert into Images values (@image, @Rollno,@img,getdate())";

   cmd.CommandText = commandText;
   cmd.CommandType = CommandType.Text;

   cmd.Parameters.Add("@image", SqlDbType.VarBinary);
   cmd.Parameters["@image"].Value = imagetype;

   cmd.Parameters.Add("@Rollno", SqlDbType.VarChar);
   cmd.Parameters["@Rollno"].Value = txtrollno.Text;

   cmd.Parameters.Add("@img", SqlDbType.VarChar);
   cmd.Parameters["@img"].Value = txtrollno.Text;

   cmd.ExecuteNonQuery();
   cmd.Dispose();
   connection.Close();

   Response.Write("导入成功");
   }
  }
  else
  {
   Response.Write("导入失败"); return;
  }
  }

运行结果如图:

这时我们就可以浏览文件夹添加需要存入的图片:

文件成功导入

如果选择了不符合条件的文件后,显示结果:

返回数据库,可以看到图片已经成功添加到数据库中了:

导出图片

现在我们看如何从数据库导出图片的,这里我会只使用Button控件,简单概述一下。

第一步:在Visual Studio创建一个空网站,命名为“ImageToBinary”。

第二步:再添加一个新页面,命名为"GetImage.aspx"。在这个页面拖放一个Button控件。

第三步: 双击Button,进入”GetImage.aspx.cs”,添加命名空间。

using System;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;

Button1_Click内编写代码:

protected void Button1_Click(object sender, EventArgs e)
 {
 string sConn = ConfigurationManager.AppSettings["ConnectionString"];

 SqlConnection objConn = new SqlConnection(sConn);

 objConn.Open();

 string sql = "select * from Images";

 SqlCommand cmd = new SqlCommand(sql, objConn);

 SqlDataReader dr = cmd.ExecuteReader();

 while (dr.Read())

 {

  byte[] bytes = (byte[])dr["img"];

  FileStream fs = new FileStream(@"E:\Images\" + dr["roll_no"] + ".jpg" , FileMode.Create, FileAccess.Write);

  fs.Write(bytes, 0, bytes.Length);

  fs.Flush();

  fs.Close();

 }

 dr.Close();

 objConn.Close();

 Response.Write("成功导出"); 

 }

运行结果:

点击“导出”:

打开指定的文件夹,图片已经保存在里面了:

最后,如果有需要,你还可以参考这篇文章:如何保存PDF、Word和Excel文件到数据库中

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • asp.net显示图片到指定的Image控件中 具体实现

    由于asp.net中的Image控件是在System.Web.UI.WebControls命名空间中,所以不能像在winform中那样通过byte[]直接显示图片. 既然这样,就只能曲线救国了.这里的例子是这样的思路:teacherdetial.aspx是最终用来显示文字和图片的页面,但是由于我们的图片需要曲线救国,所以这里另外建立一个pic.aspx.在pic.aspx页面中我们显示图片,而将teacherdetial.aspx中的Image控件的url设为pic.aspx.最终我们完成了要求

  • ASP.Net 上传图片并生成高清晰缩略图

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DT

  • ASP.NET(C#)实现一次性动态上传多张图片的代码(多个文件)

    在做asp.net的Web开发的时候,我们经常会遇到一次性上传多个文件的需求.通常我们的解决方法是固定放多个上传文件框,这样的解决办法显然是不合理的,因为一次上传多个,就意味着数量不确定.因此我们就要让这些文件上传框动态添加,下面我以我做的一个图库管理中的上传图片的功能为例 先看效果: 打开的初始界面: 默认是上传一个图片,但当我们点"增加图片"按钮时可以实现选择多个图片及其描述同时上传,本功能限制一次最多只能上传8张,且每张图片大小不超过1M,这个大家可根据实际情况更改! 如图: 下

  • Asp.net把图片存入数据库和读取图片的方法

    网上关于ASP.NET上传图片到数据库的资料非常多,常用的如下:存储图片类型数据有以下几种方式:1.将图片转换为二进制数组(byte[]) 复制代码 代码如下: byte[] fileData = this.FileUpload1.FileBytes; 2. 根据路径将文件转换为2进制数组 复制代码 代码如下: 代码 public byte[] returnbyte(string strpath){ // 以二进制方式读文件    FileStream fsMyfile = new FileSt

  • ASP.NET下上传图片到数据库,并且读出图片的代码(详细版)

    首先在SQL Server中建立一个图片存储的数库表,ImageData Column为图象二进制数据储存字段,ImageContentType Column为图象文件类型记录字段,ImageDescription Column为储蓄图 象文件说明字段,ImageSize Column为储存图象文件长度字段,结构如下: 复制代码 代码如下: CREATE TABLE [dbo].[ImageStore] ( [ImageID] [int] IDENTITY (1, 1) NOT NULL , [

  • asp.net图片上传实例

    第一.图片上传,代码如下:xxx.aspx 复制代码 代码如下: <td class="style1">                 <asp:FileUpload ID="FileUpload1" runat="server"  />                <asp:Button ID="Button1" runat="server" Text="上传一

  • asp.net 自定义控件实现无刷新上传图片,立即显示缩略图,保存图片缩略图

    如图: 点击浏览,选择图片之后,右面显示图片 第一步: 创建CtFileUpLoad.ascx 复制代码 代码如下: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="CtFileUpLoad.ascx.cs" Inherits="WebParts_CtFileUpLoad" %> <table cellpadding="0&quo

  • asp.net MVC实现无组件上传图片实例介绍

    例子: 如我想上传一个图片到服务器端:asp页面 复制代码 代码如下: <form id="form1" runat="server" action="/bookIndex/fileUpLoad/(你准备处理的 ActionResult)" method="post" enctype="multipart/form-data"> <input type="file" i

  • ASP.NET FileUpload 上传图片实例

    复制代码 代码如下: <table style="width: 100%"> <tr> <td> <asp:ValidationSummary ID="ValidationSummary1" runat="server" /> <br /> <asp:FileUpload ID="FileUpload1" runat="server" /&g

  • asp.net+FCKeditor上传图片显示叉叉图片无法显示的问题的解决方法

    弄了半天也没有找到原因,然后又重新到网上下载几个,还是不行,郁闷坏了,最后结合其他编辑器的用法,才知道是配置文件夹中上传文件夹的路径写错了 比如要上传到项目的根目录下的UserFiles下面,web.config的配置如下: 复制代码 代码如下: <appSettings> <add key="FCKeditor:BasePath" value="~/FCKeditor" /> <add key="FCKeditor:User

随机推荐