它们都可以用来存储图片.
如果你非要用数据库保存的话,mysql好像也确实提供了可以存储图片的格式,具体什么去查一下mysql帮助文档吧,我也既不清楚了.
GOOD LUCK!!!
通常对用户上传的图片需要保存到数据库中.解决方法一般有两种:一种是将图片保存的路径存储到数据库;另一种是将图片以二进制数据流的形式直接写入数据库字段中.以下为具体方法:
第一段:保存图片的上传路径到数据库:
string uppath="";//用于保存图片上传路径
//获取上传图片的文件名
string fileFullname = this.FileUpload1.FileName;
//获取图片上传的时间,以时间作为图片的名字可以防止图片重名
string dataName = DateTime.Now.ToString("yyyyMMddhhmmss");
//获取图片的文件名(不含扩展名)
string fileName = fileFullname.Substring(fileFullname.LastIndexOf("\\") + 1);
//获取图片扩展名
string type = fileFullname.Substring(fileFullname.LastIndexOf(".") + 1);
//判断是否为要求的格式
if (type == "bmp" || type == "jpg" || type == "jpeg" || type == "gif" || type == "JPG" || type == "JPEG" || type == "BMP" || type == "GIF")
{
//将图片上传到指定路径的文件夹
this.FileUpload1.SaveAs(Server.MapPath("~/upload") + "\\" + dataName + "." + type);
//将路径保存到变量,将该变量的值保存到数据库相应字段即可
uppath = "~/upload/" + dataName + "." + type;
}
第二段:将图片以二进制数据流直接保存到数据库:
引用如下命名空间:
using System.Drawing;
using System.IO;
using System.Data.SqlClient;
设计数据库时,表中相应的字段类型为iamge
保存:
//图片路径
string strPath = this.FileUpload1.PostedFile.FileName.ToString ();
//读取图片
FileStream fs = new System.IO.FileStream(strPath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] photo = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
//存入
SqlCommand myComm = new SqlCommand(strComm, myConn);
myComm.Parameters.Add("@photoBinary", SqlDbType.Binary, photo.Length);
myComm.Parameters["@photoBinary"].Value = photo;
myConn.Open();
if (myComm.ExecuteNonQuery() 0)
this.Label1.Text = "ok";
myConn.Close();
读取:
...连接数据库字符串省略
mycon.Open();
SqlCommand command = new
byte[] image = (byte[])command.ExecuteScalar ();
//指定从数据库读取出来的图片的保存路径及名字
string strPath = "~/Upload/zhangsan.JPG";
string strPhotoPath = Server.MapPath(strPath);
//按上面的路径与名字保存图片文件
BinaryWriter bw = new BinaryWriter(File.Open(strPhotoPath,FileMode.OpenOrCreate));
bw.Write(image);
bw.Close();
//显示图片
this.Image1.ImageUrl = strPath;
采用俩种方式可以根据实际需求灵活选择.
背景
所以一般来说存放这类信息,也就是存储他们的存放路径,至于文件本身存放在哪里,那这就不是数据库考虑的范畴了.数据库只关心怎么来的快,怎么来的小.
举例
拷贝 100 份这样的图片来测试
我们建三张表,分别用 LONGBLOB、LONGTEXT 和 VARCHAR 来存储这些图片信息
mysql show create table tt_image1G
*************************** 1. row ***************************
Table: tt_image1
Create Table: CREATE TABLE +tt_image1+ (
+id+ int(11) NOT NULL AUTO_INCREMENT,
+image_file+ longblob,
PRIMARY KEY (+id+)
①. row in set (0.00 sec)
+image_file+ longtext,
+image_file+ varchar(100) DEFAULT NULL,
我们来给三张表插入 100 张图片(插入前,建议把 max_allowed_packet 设置到最大)
tt_image1
do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image1(image_file)
values (load_file('/var/lib/mysql-files/$i.jpg'))";done;
values (hex(load_file('/var/lib/mysql-files/$i.jpg')))";done;
('/var/lib/mysql-files/$i.jpg');";
done;aa=$aa'commit;';mysql -S /var/run/mysqld/mysqld.sock -e "+echo $aa+";
检查下三张表记录数
那么怎么把图片取出来呢?
tt_image1 直接导出来二进制文件即可,下面我写了个存储过程,导出所有图片.
mysql DELIMITER $$mysql USE +ytt+$$mysql DROP PROCEDURE IF EXISTS +sp_get_image+$$mysql CREATE DEFINER=+ytt+@+localhost+ PROCEDURE +sp_get_image+()mysql BEGIN ? ? ?DECLARE i,cnt INT DEFAULT 0; ? ? ?SELECT COUNT(*) FROM tt_image1 WHERE 1 INTO cnt; ? ? ?WHILE i cnt DO ? ? ? ?SET @stmt = CONCAT('select image_file from tt_image1 ?limit ',i,',1 into dumpfile ''/var/lib/mysql-files/image',i,'.jpg'''); ? ? ? ?PREPARE s1 FROM @stmt; ? ? ? ?EXECUTE s1; ? ? ? ?DROP PREPARE s1; ? ? ?SET i = i + 1; ? ? ?END WHILE; ? ? ?END$$mysql DELIMITER ;mysql call sp_get_image;
总结
这里我举了个用 MySQL 来存放图片的例子,看完小编介绍的怎么将mysql文件导出有以下三点:
占用磁盘空间大(这样会带来各种各样的功能与性能问题,比如备份,写入,读取操作等)
使用不易
还是推荐用文件路径来代替实际的文件内容存放
土嘎嘎的粉丝们大家好,很高兴回答你的问题.
一般有两种方式,
一种是将图片序列化后,将序列化的结果存入数据库中.使用时在读出进行反序列化.
另一种是将文件存放到一个位置,将存放的路径存入数据库.使用时按照路径获取图片.
以上就是土嘎嘎小编为大家整理的mysql怎么存图片文件相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!