( Java面试题 )
通常,应该把文件放在文件系统(硬盘)上,在数据库里只存储图片文件的路径 。但是,如果想 图文文件直接存在数据库里,怎么实现呢?
由于图片数据较大,在MySQL中直接存储的话,应该选则 BLOB 类型的字段。
( 以下假设图片的大小为 100K 以下 , 太大的不适合 )
1 将字段类型设为 mediumtext
此字段可用于存储 <16MB 的文本
2 读取文件数据,转成Hex 或 base64
关于 Hex 和 base64 编码,参考 Java学习指南 - 项目应用篇,数据的编码
将编码后的文本存到数据库中即可
// 写入过程,伪代码表示
byte[] buffer = new byte[fileSize] ;
fileStream.read ( buffer)
String base64str = base64Encode ( buffer ) 将数据转成base64字符串
String sql = "update YOUR_TABLE set thumb='%s' WHERE ... " 拼凑一个SQL
执行 sql ...
// 读取过程,伪代码表示
String sql = ....
String base64str = ... 从数据库中取读该列的值
byte[] imageData = base64Decode ( base64str ) 把 base64字符串转回byte[]
file.write ( imageData )
再次强调,图片还是要小一点,如果太大是真得不适合存到数据库的。