将图片以二进制的格式存储到数据库中

以前看到论坛里有很多人想要把图片存到数据库中,而不是把图片存到文件夹里,这个需求在当里看来有点麻烦,因为那时只想到用二进制的方法,但具体的实现我一直都没想过,最近自己做一个项目,实在没办法,只能多看看,多学习了.如下是代码:

//从上传控件中获取上传文件的路径

string ImgPath = FileUpload1.PostedFile.FileName;

//得到文件名

 string ImgName = ImgPath.Substring(ImgPath.LastIndexOf("//") + 1);

//得到上传文件名的扩展名

string ImgExtend = ImgPath.Substring(ImgPath.LastIndexOf(".") + 1);

//判断上传的文件格式是否正确

if (!(ImgExtend == "bmp" || ImgExtend == "jpg" || ImgExtend == "gif")) { Label3.Text = "上传图片的格式不正确!"; return; }

//获取上传文件的长度

 int FileLen = this.FileUpload1.PostedFile.ContentLength; Byte[] FileData = new Byte[FileLen]; HttpPostedFile hp = FileUpload1.PostedFile;

//创建访问客户端上传文件的对象

 Stream sr = hp.InputStream;

//创建数据流对象

 sr.Read(FileData, 0, FileLen);

//将图片数据放到FileData数组对象实例中,其中0代表数组指针的起始位置,FileLen表示要读取流的长度(指针的结素位置)

SqlConnection con = new SqlConnection("server=(local);user id=sa;pwd=;database=数据库名");

con.Open(); SqlCommand com = new SqlCommand("Insert INTO 表名 (name) VALUES (@imgdata)", con); com.Parameters.Add("@imgdata", SqlDbType.Image); com.Parameters["@imgdata"].Value = FileData; com.ExecuteNonQuery(); Label3.Text = "保存成功!";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图片的常见存储与读取凡是有以下几种: 存储图片:以二进制的形式存储图片时,要把数据库的字段设置为Image数据类型(SQL Server),存储的数据是Byte[]. 1.参数是图片路径:返回Byte[]类型: public byte[] GetPictureData(string imagepath) { /**/////根据图片文件的路径使用文件流打开,并保存为byte[] FileStream fs = new FileStream(imagepath, FileMode.Open);//可以是其他重载方法 byte[] byData = new byte[fs.Length]; fs.Read(byData, 0, byData.Length); fs.Close(); return byData; }2.参数类型是Image对象,返回Byte[]类型: public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto) { //将Image转换成流数据,并保存为byte[] MemoryStream mstream = new MemoryStream(); imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp); byte[] byData = new Byte[mstream.Length]; mstream.Position = 0; mstream.Read(byData, 0, byData.Length); mstream.Close(); return byData; }好了,这样通过上面的方法就可以把图片转换成Byte[]对象,然后就把这个对象保存到数据库去就实现了把图片二进制格式保存到数据库去了。下面我就谈谈如何把数据库图片读取出来,实际上这是一个相反的过程。 读取图片:把相应的字段转换成Byte[]即:Byte[] bt=(Byte[])XXXX 1.参数是Byte[]类型,返回值是Image对象: public System.Drawing.Image ReturnPhoto(byte[] streamByte) { System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte); System.Drawing.Image img = System.Drawing.Image.FromStream(ms); return img; }2.参数是Byte[] 类型,没有返回值,这是针对asp.net图片从输出到网页上(Response.BinaryWrite) public void WritePhoto(byte[] streamByte) { // Response.ContentType 的默认值为默认值为“text/html” Response.ContentType = "image/GIF"; //图片输出的类型有: image/GIF image/JPEG Response.BinaryWrite(streamByte); }补充: 针对Response.ContentType的值,除了针对图片的类型外,还有其他的类型: Response.ContentType = "application/msword"; Response.ContentType = "application/x-shockwave-flash"; Response.ContentType = "application/vnd.ms-excel";另外可以针对不同的格式,用不同的输出类型以适合不同的类型: switch (dataread("document_type")) { case "doc": Response.ContentType = "application/msword"; case "swf": Response.ContentType = "application/x-shockwave-flash"; case "xls": Response.ContentType = "application/vnd.ms-excel"; case "gif": Response.ContentType = "image/gif"; case "Jpg": Response.ContentType = "image/jpeg"; }
以下是将图片二进制存入Phpadmin数据库并显示的实现代码: 1. 存入数据库 // 连接数据库 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "dbname"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // 读取图片文件 $image_path = "image.jpg"; $image_data = file_get_contents($image_path); // 将图片数据存入数据库 $sql = "INSERT INTO images (image_data) VALUES ('$image_data')"; if ($conn->query($sql) === TRUE) { echo "Image saved to database successfully"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close(); 2. 显示图片 // 连接数据库 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "dbname"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // 从数据库读取图片数据 $sql = "SELECT image_data FROM images WHERE image_id = 1"; $result = $conn->query($sql); if ($result->num_rows > 0) { // 输出图片数据 $row = $result->fetch_assoc(); header("Content-Type: image/jpeg"); echo $row["image_data"]; } else { echo "Image not found"; } $conn->close(); 注意:以上代码仅供参考,实际应用需要根据具体情况进行修改和优化。同时,将图片存入数据库会增加数据库的负担和数据存储量,建议仅在特定情况下使用,如需要保护图片版权等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值