网站首页 > 文章中心 > 其它

图片怎么存在mysql里

作者:小编 更新时间:2023-09-01 14:10:58 浏览量:265人看过

如何想Mysql数据库中存储图片

图片插入到数据库不是个好方法,如果你确实要存储图片到数据库的话,修改你的sql语句,不可以直接插入的.例如:

update person set p_image = LOAD_FILE('D:\incident1.jpg') where p_id = "asdsadssdsadfff";

建议把'D:\incident1.jpg'放在mysql的安装目录里面,避免权限问题...

解释:sql必须要有对 'D:\incident1.jpg'文件 和相应的路径 读权限,要不也不可以的. 另外检查LOAD_FILE 函数是否被禁用.这个函数是个危险的函数,很容易利用该函数对数据库攻击.

LOAD_FILE(file_name):

读取file_name文件 并以字符串形式返回,使用这个函数时,file_name必须存在于服务器上,而且是完整路径,sql要具有file_name的读取权限,还有该文件的size必须小于数据库 max_allowed_packet的值,否则读取的值为空.如果文件不存在或者sql没有读权限,那么该函数讲返回null

图片怎么存在mysql里-图1

怎样在Mysql中直接储存图片

两种,一种是将图片转化成二进制数据流存入数据库中.一种是保存图片的路径,然后前台读取路径去调用图片.相关的代码百度一下应该会有,第二种方法实现上比较简单,就是存储路径,然后根据路径读取对应的图片显示出来.第一种就比较麻烦,要先把图片转化成二进制数据,读取时就是从数据库读取对应数据再转化成图片显示出来.

请问在mysql中怎么存储图片呢?

背景

所以一般来说存放这类信息,也就是存储他们的存放路径,至于文件本身存放在哪里,那这就不是数据库考虑的范畴了.数据库只关心怎么来的快,怎么来的小.

举例

拷贝 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 来存放图片的例子,看完小编介绍的c语言程序中主函数是_c语言程序由函数组成有以下三点:

占用磁盘空间大(这样会带来各种各样的功能与性能问题,比如备份,写入,读取操作等)

使用不易

还是推荐用文件路径来代替实际的文件内容存放

mysql里面怎样插入图片

新建类型为mediumblob的字段【小图片可以用blob,更大的图片可以用LongBlob】

如何将图片储存在MySQL数据库里

通常对用户上传的图片需要保存到数据库中.解决方法一般有两种:一种是将图片保存的路径存储到数据库;另一种是将图片以二进制数据流的形式直接写入数据库字段中.以下为具体方法:

第一段:保存图片的上传路径到数据库:

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;

采用俩种方式可以根据实际需求灵活选择.

mysql里怎么存放图片

土嘎嘎的粉丝们大家好,很高兴回答你的问题.

一般有两种方式,

一种是将图片序列化后,将序列化的结果存入数据库中.使用时在读出进行反序列化.

另一种是将文件存放到一个位置,将存放的路径存入数据库.使用时按照路径获取图片.

以上就是土嘎嘎小编为大家整理的图片怎么存在mysql里相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章