实现数据库存储图片技巧

在现代应用程序中,图片是一个必不可少的元素,而且往往需要支持图片上传、处理、存储、展示等功能。其中,存储图片是非常关键的一个环节,传统的做法是将图片存储在文件系统中,但是这样存在一些问题,例如:不便于备份、迁移、不同步等。另外,当我们需要和数据库进行集成时,就需要用到数据库存储图片技巧。

本文将介绍如何在数据库中存储图片,并重点讲解以下技巧:

1. 以二进制数据存储图片

2. 使用Base64编码图片

3. 利用Blob类型存储图片

1. 以二进制数据存储图片

之一种方法是直接将图片存储在数据库中的表中。具体的做法是在数据库建立一个表,其中需要包含一个二进制类型(BLOB)的列,以存储图片数据。这种方式适用于小图片,而对于大图片,会造成数据库性能问题。

以下是一个建立图片存储表的SQL语句:

“`

CREATE TABLE `image_table` (

`image_id` int(11) NOT NULL AUTO_INCREMENT,

`image_name` varchar(255) NOT NULL,

`image_content` blob NOT NULL,

PRIMARY KEY (`image_id`)

);

“`

其中image_id和image_name可以自行定义,image_content为二进制类型,并且不能为空。

2. 使用Base64编码图片

第二种方法是将图片转换为Base64编码,然后存储在数据库中。Base64是一种基于64个字符的编码方式,可以将任意二进制数据编码成可打印的ASCII字符。这种方式适用于小图片,而对于大图片,虽然可以避免数据库性能问题,但是会占用更多的存储空间。

以下是一个建立图片存储表的SQL语句:

“`

CREATE TABLE `image_table` (

`image_id` int(11) NOT NULL AUTO_INCREMENT,

`image_name` varchar(255) NOT NULL,

`image_base64` text NOT NULL,

PRIMARY KEY (`image_id`)

);

“`

其中image_id和image_name可以自行定义,image_base64为文本类型,并且不能为空。

下面是一个将图片转换为Base64编码的示例代码:

“`

public static String imageToBase64(String imagePath) throws IOException {

InputStream inputStream = new FileInputStream(imagePath);

byte[] bytes = new byte[inputStream.avlable()];

inputStream.read(bytes);

inputStream.close();

return Base64.getEncoder().encodeToString(bytes);

}

“`

3. 利用Blob类型存储图片

第三种方法是将图片存储在数据库中,但使用分离存储技术,即将图片存储在操作系统文件系统中,通过数据库中的Blob类型引用这些文件。这种方法可用于大图片,并且保证了数据库的高性能和存储空间的有效利用。

以下是一个建立图片存储表的SQL语句:

“`

CREATE TABLE `image_table` (

`image_id` int(11) NOT NULL AUTO_INCREMENT,

`image_name` varchar(255) NOT NULL,

`image_blob` blob NOT NULL,

PRIMARY KEY (`image_id`)

);

“`

其中image_id和image_name可以自行定义,image_blob为二进制类型,并且不能为空。

下面是一个将图片存储到操作系统文件系统中,并返回Blob类型的示例代码:

“`

public static Blob imageToBlob(String imagePath) throws IOException, SQLException {

FileInputStream fileInputStream = new FileInputStream(imagePath);

Connection connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”, “root”, “password”);

PreparedStatement preparedStatement = connection.prepareStatement(“INSERT INTO image_table(image_name, image_blob) VALUES(?,?)”);

preparedStatement.setString(1, “image”);

preparedStatement.setBinaryStream(2, fileInputStream, fileInputStream.avlable());

preparedStatement.executeUpdate();

ResultSet resultSet = preparedStatement.getGeneratedKeys();

resultSet.next();

long imageId = resultSet.getLong(1);

preparedStatement.close();

connection.close();

return getBlob(imageId);

}

private static Blob getBlob(long imageId) throws SQLException {

Connection connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”, “root”, “password”);

PreparedStatement preparedStatement = connection.prepareStatement(“SELECT image_blob FROM image_table WHERE image_id=?”);

preparedStatement.setLong(1, imageId);

ResultSet resultSet = preparedStatement.executeQuery();

resultSet.next();

Blob blob = resultSet.getBlob(1);

preparedStatement.close();

connection.close();

return blob;

}

“`

本文介绍了三种在数据库中存储图片的技巧,侧重于讲解二进制存储和Blob存储,同时提供了Base64编码存储的示例代码。对于不同的业务需求,可以选择不同的存储方式,但需要注意数据库的性能和存储空间的利用。建议尽量利用数据库中高级类型,特别是Blob类型,来合理存储图片数据。

相关问题拓展阅读:

php 数据库图片存储问题?

相对路径,从你项目根目录开始的,取用的时候在拼接前边的路径,比如你在本地开发,路径轮档存的是你的c盘,换腊粗乱到别人电脑上在d盘就不好使了,凳裂传到服务器上同样报错

存储的是相对路径,可以到网站服务器上查看,应该有upload文件夹,里面就是存储的图片,这样写的好处是节省了数据库存储空间,转移的时候可以直接将整个服务器的图片打包转移。

访问的时候,前面可以拼接域名和指定的路盯正历径,这些后台可以轻松获取到,然后拼接上服务器的路径,我们就可以直接在网页问到图片了。

这是很常见的图片数据凯搜库保存方式,和直接把图片的二进制存入数据库,这样的方式便于检索,占用空间小。当然,目前主流都采用oss来单独存储文件了,就是有专门的文件服务器,这个时候,一般存储的是清弊完整的图片路径。

如果储存具体的路径,那么数据哪瞎段中将会包含很多重复的字串,会造成空间的浪费,所以一般都是储存相对路径(相对于页面文件李誉的路径),使用神樱时只需要直接放入img标签的src属性中即可。

$file = $_FILES; //上传的图片相关信息

$suffix = strtolower(strrchr($file,’.’)); //返回后缀 wav strrchr分割获取字符串 strtolower转小写

$filename = uniqid(“img_”,false); //生成以chat_pcm_开头的唯一id

$uploadpath = ROOT_PATH.’uploads/’; //保存路径

$file_up = $uploadpath.$filename.jpg; //保存文件的绝对路径 路径、文件名、后缀

$re = move_uploaded_file($file,$file_up); //move_uploaded_file() 函裤好数将上传的文件移动到新位置。 参数乎纯岩1:规定要移动的文件 参数2:移动到的位置

然后获取名称存进数据(进行数据库操作)

数据库存取图片的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于数据库存取图片,「实现数据库存储图片技巧」,php 数据库图片存储问题?的信息别忘了在本站进行查找喔。


新软师兄 » 「实现数据库存储图片技巧」 (数据库存取图片)
50T免费网盘资源大集合【持续更中~~~~】:点击查看

dase kand pornhan.mobi xvideo desi gay pcso 2pm result today pinoytvfriends.com where i can watch bad romeo كلام فى النيك wfporn.com قصص محارم حديثة busporn porngugu.mobi indian sexx vedios sex ka video noticieroporno.com himachal pradesh sex com
nero hentai hentaitgp.com ламия хентай www.mom xxx.com alohaporn.me sahara knite mature fucking tubepatrolporn.com bhabi sex indian girl sex gotporn.mobi xnxx family strocks ang probinsyano july 20 2022 full episode youtube pilipinoteleserye.com ano ang pambansang sasakyan ng pilipinas
احلي سكس محارم pornxporn.org نيك فلاحى multi.xnxx alohaporn.net telugu sex chart سكس قصيرات arabysexy.org نيك نقاب www assames sex com umora.info desi sexy bhabi 8teenx bukaporn.com india hot sex videos