问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ASP.NET网站中MySql数据库选哪种方式存储图片

发布网友 发布时间:2022-04-09 14:48

我来回答

4个回答

懂视网 时间:2022-04-09 19:10

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;
  }
  }
View Code

运行结果如图:

技术分享

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

技术分享

文件成功导入

技术分享

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

技术分享

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

技术分享

导出图片

现在我们看如何从数据库导出图片的,这里我会只使用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("成功导出"); 


 } 
View Code

运行结果:

技术分享

点击“导出”:

技术分享

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

技术分享

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

谢谢浏览!

 

ASP.Net数据库如何存取图片

标签:数据读取   取图   页面   char   语句   button   sys   response   nec   

热心网友 时间:2022-04-09 16:18

图片是不能存储到数据库的,图片上传之后会有一个上传之后的文件路径,在数据库里面存储的是图片的路劲,读取的时候直接输出图片路径就可以的

热心网友 时间:2022-04-09 17:36

一般情况下没有在数据库表里直接存储图片的,都是值存储图片的路径。
要在数据库里存储图片,一般都是在程序级先将图片序列化,然后才保存在数据库,要显示的时候先反序列化再显示。

热心网友 时间:2022-04-09 19:10

数据库虽然可以直接存储图片,但由于图片格式太大,一般都存图片所在的路径
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
茶叶可以放在冰箱里吗茶叶能不能放冰箱 茶叶放冰箱里好吗茶叶放冰箱里好不好 茶叶可以放冰箱保存么 茶叶放冰箱放冷藏好吗 甲、乙两根绳子/,甲绳长63米,乙绳长29米、两根绳子前去同样的长度)剩下... 新华书店在送图书下乡活动中,送去的连环画战50%,余下的是故事书,故事书... 李老师带了300元钱去新华书店为学校图书室买《现代汉语词典》38.50.他... dnf55传承重甲套多少钱 dnf漫游55传承套叫什么名字 Dnf刺客五十五级刷图传承套多少钱?叫什么名字? DNF55级传承皮甲套多少钱,每个部位价格分别是多少,20分 买房时银行买的基金要求存一年可以提前赎回吗 电脑的windowsupdate是什么?需要开启吗? 掌通校园可以两个家长绑定同一个孩子吗? 微课掌上通一个手机号能绑定两个孩子吗? 请问人们常说的“可转换优先股”是什么? 微课如何加入学生名单 换手机号码后,第一个孩子能在微课掌上通里用,但不能再增加多一个孩子。请问怎么办? 期货交易用市价成交怎么做? 新的煮菜的铁锅很黑,用了很多方法清洁都还是黑的,怎么办呢? 期货中的市价,现价,跟盘价,指定价有什么区别 期货 市价成交和限价成交 首付10万买房月供多少 我想贷款10万元来买房付首付,可我什么都不懂,急切地盼望大家的帮助 手里有10万的女生可以买房嘛 买房子比如10万付了首付还要什么钱吗,装修费用要全部付清吗,我只有10万能买房子吗, 受精卵是怎么样变成胎儿的?着床后孕妇会有什么变化? 胎儿在妈妈肚子里一般几个月的时候开始“长肉”? 企业银行为什么第一次查询有余额的,第二次查询余额是0元 有谁买过vr眼镜吗? 哪个品牌好。说说用过的感受 phantom 3 professional 和advanced的区别 可转换优先股的优先权利 我下载了微课掌上通为什么只能显示一个孩子的另一个查不到 我有两个孩子,两个孩子的学校都叫家长用手机下载微课掌上通APP并登陆接收学校发的通知。我是用同一个 Windows Update 这个需要打开么??拜托了各位 谢谢 如果定投一年的基金,因为某些原因提前赎回,是否可以?需不需要补交什么费用? windows update需要打开吗 微课掌上通里没有学生信息,怎么办? 定期基金如何赎回? windows自动更新有必要打开吗? 我一年前做了基金定投,现在想赎回,我想知道我的收益和赎回所需要的手续费是怎么计算?先谢谢了 微课掌上通学生信息没法启动 天天基金定期宝能提前赎回来么? win7 64位旗舰版要不要开windows update更新 邮政储蓄银行定期基金存款可以提前取出吗? 电脑开启Windows Update有什么好处?又有什么坏处? 360安全卫士要不要开启Windows Update? Windows update更新有用吗?有必要进行更新吗 MAC下有无像visio那样画跨职能的流程图的软件吗 淘宝网装修图片轮播怎样铺满全屏 mac 端装什么软件比较好啊,画流程图的,以前在pc端用的是office visio