怎么往mysql里存音乐 mysql数据库存储音频文件( 二 )


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;
tt_image2
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image2(image_file)
values (hex(load_file('/var/lib/mysql-files/$i.jpg')))";done;
tt_image3
root@ytt:/var/lib/mysql-files# aa='begin;';for i in `seq 1 100`;
do aa=$aa"insert into ytt.tt_image3(image_file) values
('/var/lib/mysql-files/$i.jpg');";
done;aa=$aa'commit;';mysql -S /var/run/mysqld/mysqld.sock -e "`echo $aa`";
检查下三张表记录数
mysql select 'tt_image1' as name ,count(*) from tt_image1 union allselect 'tt_image2',count(*) from tt_image2 union all select 'tt_image3', count(*) from tt_image3;+-----------+----------+| name| count(*) |+-----------+----------+| tt_image1 |100 || tt_image2 |100 || tt_image3 |100 |+-----------+----------+3 rows in set (0.00 sec)
看下文件大小 , 可以看到实际大小排名 , LONGTEXT 字段存储的最大,LONGBLOB 字段缩小到一半,最小的是存储图片路径的表 tt_image3 。所以这里从存储空间来看,存放路径最占优势 。
root@ytt:/var/lib/mysql/ytt# ls -silhS tt_image*274603 1.1G -rw-r----- 1 mysql mysql 1.1G Jul 11 07:27 tt_image2.ibd274602 545M -rw-r----- 1 mysql mysql 544M Jul 11 07:26 tt_image1.ibd27460580K -rw-r----- 1 mysql mysql 112K Jul 11 07:27 tt_image3.ibd
那么怎么把图片取出来呢?
tt_image3 肯定是最容易的
mysql select * from tt_image3;+----+----------------------------+| id | image_file|+----+----------------------------+|1 | /var/lib/mysql-files/1.jpg |+----+----------------------------+...100 rows in set (0.00 sec)
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 BEGINDECLARE i,cnt INT DEFAULT 0;SELECT COUNT(*) FROM tt_image1 WHERE 1 INTO cnt;WHILE icnt DOSET @stmt = CONCAT('select image_file from tt_image1limit ',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;
tt_image2 类似,把 select 语句里 image_file 变为 unhex(image_file) 即可 。
总结
这里我举了个用 MySQL 来存放图片的例子 , 总的来说有以下三点:
占用磁盘空间大(这样会带来各种各样的功能与性能问题,比如备份 , 写入,读取操作等)
使用不易
还是推荐用文件路径来代替实际的文件内容存放
mysql存储音乐,图片,txt文档 , jsp调用的问题这是我写的上传部分的代码,你可以参考下 。
public String savefile() throws Exception{
String realpath = ServletActionContext.getServletContext().getRealPath(
"/file");
realpath = realpath;
if (upload != null) {
//使用上传文件名创建本地文件
File savefile = new File(new File(realpath), uploadFileName);
if (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
//拷贝文件到上传目录
FileUtils.copyFile(upload, savefile);
}
if ((this.uploadFileName != null)(!this.uploadFileName.equals(""))) {
//设置上传文件名
if(myfile.getId()!=null){//重新上传文件时先删除原先的文件
Myfile tmpfile = fileService.loadfile(myfile.getId());
String fileName = tmpfile.getFilename();
String filePath = realpath + "/" + fileName;
File deletefile = new File(filePath);
deletefile.delete();
myfile.setFilename(uploadFileName);
}
else
myfile.setFilename(uploadFileName);
}
else {