保存Mysql声音到数据库,保存声音
文章目录:
- 1、mysql哪些字符类型可以存储音频、视频文件?
- 2、声音和图像以二进制数据流的形式存储在mysql数据库中。如何从数据库下载它们并将二进制文件转换为正确的格式?
- 3. 在数据库中存储图像和视频
- 4、将多媒体信息(如声音文件、视频文件)保存到数据库中,然后在JSP页面上显示。数据库是mysql
- 5.在mysql中存储音乐和图像文件
- 6.如何在mysql或其他数据库中存储图像、声音和视频
mysql中有哪些字符类型可以存储音视频文件
二进制类型如:binary、varbinary、bit、tinyblob、blob、mediumblob、longblob,
音频和视频以二进制流的形式存储在mysql数据库中。如何从数据库下载并将二进制文件转换为正确的格式?
1。将图像文件存储到数据库中
我们知道Image类型数据在数据库中是“二进制数据”,所以图像文件必须先转换为字节数组才可以存储到数据库中。
我写了一些代码片段,简单说明一下数据操作,方便直接调用。
//按文件名(完整路径)
public byte[] SetImageToByteArray(string fileName)
{
FileStream fs = new FileStream(filename♺ in.filename,mode.t) ; StreamLength = (int)fs.Length;
byte[] image = 新字节[streamLength];
fs.Read( image, 0, streamLength);
fs.Close();
return image;
}
//另外,用ASP.NET FileUpload控件获取到的图片文件也可以通过以下方法获取
public byte[] SetImageToByteArray(FileUpload FileUpload1)
{
Stream stream = FileUpload1.PostedFile.InputStream;
byte[] photo = new byte[FileUpload1.PotenstedFile.InputStream; Read( 照片, 0, FileUpload1.PostedFile.ContentLength);
stream.Close();
返回照片;
}
2.从SQL Server数据库中读取图像类型数据,转换为byte[]或图像文件
//使用SqlDataReader,加载System.Data.SqlClient命名空间
//将数据库中的图像类型转换为byte[]
public byte[] SetImage(SqlDataReader reader)
{
return (byte[])reader["Image"]; //图像为数据库中存储的ImageType字段
}
//将byte[]转换为图像类型
//填充以下命名空间 using System.Drawing;/using System.IO;
System .Data.SqlClient;*/
public Image SetByteToImage(byte[] mybyte)
{
Image Image;
MemoryStreamL,mymemorystream,th)mymemorystream, ;
image = Image.FromStream(mymemorystream );
返回图像;
}
将图像和视频存储在数据库中
在节目策划过程中,我们通常不会将图片、音视频素材直接存储在数据库中。这会突然增加数据库的大小,严重影响数据库操作的效率。
一般来说,多媒体服务器是为了支持流媒体格式的处理而构建的。节目或网站中涉及到的图像、音频、视频等素材都存储在流媒体服务器上,然后可以记录访问路径,然后将这个路径存储到数据库中。当应用系统调用时,可以通过路由进行组合。可以实现合适的多媒体播放插件。

如何将多媒体信息(如音频文件、视频文件)保存到数据库中,然后在JSP页面上显示。数据库是mysql
使用大型对象类型。
mysql大对象访问:
类型通常必须使用mediumblod,
blob只能存储2-16次方字节,
mediumblod通常是24次方,longb
MYSQL其默认配置只能存储1M文件。对于WIN版本要更改配置,在mysql.ini文件
中更改max_allowed_packet、net_buffer_length等参数,或者直接SET GLOBAL varName=value。
Linux版本可以在启动参数后添加-max_allowed_packet=xxM等参数。
MYSQL存储大对象时最好直接setBinaryStream存储,既快捷又方便。:
导入Java。 sql.*;
java.io.*;
public class DBTest {
static String driver = " org.gjt.mm.mysql.Driver";
static String url = "jdbc: mysql //localhost:3306/test";
静态字符串用户=“root”;
静态字符串passwd=“passwd”;
public static void main(String[] args) 抛出异常 {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url,user,passw) ) ;
int op = 1;
//插入
if (op == 0) {
PreparedStatement ps = conn.prepareStatement("插入 tb_file 值" (?,?) );
ps.setString(1, "aaa.exe");
InputStream in = new FileInputStream("d:/aaa.exe");
ps.setBinaryStream(2,in,in.available( ));
ps.executeUpdate(); tb_file where filename = ?");
ps.setString(1, "aaa.exe");
ResultSet rs = ps.executeQuery();
rs.next();
输入流= rs.getBinaryStream("文件内容");
System.out.println(in.available());
FileOutputStream out = new FileOutputStream("d:/bbb.exe");
byte[] b = new byte[1024];
int len = 0;
while ( (len = be.read (b)) != -1) {
out.write(b, 0, len);
out.flush();
}
out.close();
in 。 close();
rs.close();
ps.close();
}
}
catch (异常 ex) {
ex.printStackTrace(System.ki) ;
}
最后{
try {conn.close();}
catch (Exception 异常) { }
}
}
} 音乐和图像文件位于
图像和音乐可以以二进制形式存储。首先你需要在mysql中创建一个新的数据库。我们将把这些二进制文件存储在这个数据库中。在示例中我将使用以下结构。要创建数据库,您需要执行以下操作:
进入 MySql 控制器
发出“create database binary_data;”命令。
输入“使用binary_data;”命令。
类型“创建表binary_data(ID INT(4)NOT NULL AUTO_INCRMENT主键,
描述CHAR(50),bin_data LONGBLOB,文件名CHAR(50),文件大小CHAR(50),文件类型。));” (线不能断)
不出意外的话数据库和表一定要建好
用于存储文件的示例程序。使用此示例通过 HTML 表单将文件传输到数据库。 .
将图像、声音和视频存储在mysql或其他数据库中
背景
MySQL一直有TEXT、BLOB等类型用于存储图像、视频等大对象信息。例如一张图片,任意一张图片大于5M。视频也是如此。所有视频都超过2G。
假设MySQL用于存储电影、视频等信息。一个单元是2G,所以存储1000个单元就是2TB。 2 TB 只有 1000 条记录。但就数据库性能而言,不仅仅与记录数有关,还与记录数有关。它还取决于它占用多少磁盘空间。随着空间越来越大,之前的所有经验等等都变得无效。
因此,一般来说,这类信息的存储就是其存储路径的存储。至于文件存储在哪里,那超出了数据库的范围。数据库只涉及如何变快和如何变小。
示例
虽然不建议使用 MySQL 执行此操作,但您应该了解并了解如何使用 MySQL 执行此操作。例如下面这张微信图片大小约为5M。 †
复制此映像的 100 个副本以测试
root@ytt:/var/lib/mysql-files# i in `seq 1 100`; do cp 微信图片_20190711095019.jpg "$i" .jpg;done;
root@ytt:/var/lib/mysql-files# ls
100.jpg 17.jpg 25.jpg 33.jpg 41.jpg 4.jpg 58.jpg 66.jpg 74 .jpg 82.jpg 90.jpg 99.jpg f8.tsv
10.jpg 18.jpg 26.jpg 34.jpg 42.jpg 50.jpg 59.jpg 67.jpg 75.jpg 83.jpg 91.jpg 9.jpg 微信图片_20190711095019.jpg
1111.jpg
1111 .jpg .jpg 35.jpg 43.jpg 51.jpg 5.jpg 68.jpg 76.jpg 84.jpg 92.jpg f1.tsv
11.jpg 1.jpg 28.jpg 36.j pg 44.jpg 52. jpg 60.jpg 69.jpg 77.jpg 85.jpg 93.jpg f2.tsv
12.jpg 20.jpg 29.jpg 37.jpg 45.jpg 53.jpg 61.jpg 6.jpg 78.jpg 86 .jpg 94.jpg f3.tsv
13.jpg 21.jpg 2.jpg 38.jpg 46.jpg 54.jpg 62.jpg 70.jpg 79.jpg 87.jpg 95.jpg f4.tsv
14.jpg 22.jpg 30.jpg 39.jpg 47.jpg 55.jpg 63.jpg 71.jpg 7.jpg 88.jpg 96.jpg f5.tsv
15.jpg 23.jpg 31.jpg 3 . jpg 48.jpg 56.jpg 64.jpg 72.jpg 80.jpg 89.jpg 97.jpg f6.tsv
16.jpg 24.jpg 32.jpg 40.jpg 49.jpg 5 7.jpg 65.jpg 73.jpg 81.jpg 8.jpg 98.jpg f7.tsv
我们创建三个表,我们使用LONGBLOB、LONGTEXT和VARCHAR来存储这些图像信息
mysql show 创建表tt_image1G
****************************** 1 号线 ************** ** ** * ******
表:tt_image1
创建表:CREATE TABLE `tt_image1` (
`id` int(11) NOT NULL AUTO_INCRMENT,
`longb,le `` `blo_b 主键 (`id`)
) 引擎=InnoDB 默认字符集=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
池中的 1 行(0.00 秒)
创建 tablegege2Gtt ** ***** ****************** 第 1 行 ********************** * **
表:tt_image2
创建表:CREATE TABLE `tt_image2` (
`id` int(11) NOT NULL AUTO_INCRMENT,
(KEYMAD`longtext_fi`)
) ENGINE =InnoDB DEFAULT CHARSET= utf8mb4 COLLATE=utf8mb4_0900_ai_ci
池中的1行(0.00秒)
显示mysql创建表tt_image3G**************** ** ******** ****** 第 1 行 ******************************
表:tt_image3
创建表: 创建表 `tt_image3` (
`id` int(11) NOT NULL AUTO_INCRMENT,
`image_file` varchar(100) 默认
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
集合中1行(0.00秒)
将100张图片插入到三个表中(建议插入前设置max_maxim_max_包)1
root @ytt :/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqld.sock -e "插入 ytt1.tt_image (image_file)
值(load_file('/var/lib/mysql-files/$i.jpg'))";完成;
tt_image2
root@ytt:/var/lib/mysql-files # for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqld.sock -e "插入 ytt.tt_image2(image_file)
values_fi (hex(le ('/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"插入 ytt.tt_image3(image_file) 值
('/var/lib/mysql-files/$i.jpg');";
done ;aa=$aa'commit;';mysql -S /var/run/mysqld/mysqld.sock -e "`echo $aa`";
查看三个表的记录数
mysql 选择 'tt_image1' 作为名称,count(*) from tt_image1 union allselect 'tt_image2',count(*) from tt_image2 union all select 'tt_image3', count(*) from tt_image3;+------- -- - --+----------+|名称 |计数(*) |+------------+----------+| tt_图像1 | 100 || tt_图像2 | 100 || tt_图像3 | 100 |+-----------+----------+3 行一组(0.00 秒)
查看文件大小,可以看到按照实际大小,LONGTEXT字段最大,LONGBLOB字段减半,最小的是存储图片路径的tt_image3表。所以在存储方面,存储路径具有最大的优势。
root@ytt:/var/lib/mysql/ytt# ls -silhS tt_image*274603 1.1G -rw-r----- 1 mysql mysql 1.1G 7月11日07:27 tt_image25.45 rw- r ----- 1 mysql mysql 544M 11-07:26 tt_image1.ibd274605 80K -rw-r----- 1 mysql mysql 112K 11.07:27 tt_image1.ibd274605 如何提取图像? ?
tt_image3 显然是最简单的
mysql select * from tt_image3;+----+----------------------------------------+|标识符|图像文件--+| 1 | /var/lib/mysql-files/1.jpg |+-- --+----------------------------+. . .100 行池(0.00 秒)
tt_image1 直接导出二进制文件就足够了。下面我编写了一个存储过程来导出所有图像。 ElMysql 分隔符 $ Mysql 使用 `ytt` $ $ MySQL 丢弃过程(如果存在)。 SP_Get_image` $$ 创建 MySQL 定义器 `SP_get_image` () MySQL 开始声明 I, CNT int 默认 0 ;选择 COUNT(*) FROM tt_image1 WHERE 1 INTO cnt; WHILE i cnt DO SET @stmt = CONCAT('从 tt_image1 限制中选择 image_file ',i,',1 dumpfile ''/var/lib/mysql-files/image ',i,'.jpg'');从 @stmt 准备 s1;
tt_image2类似,只需将select语句中的image_file参数改为unhex(image_file)即可。
总结
这里我举一个使用MySQL存储图片的例子。通常有三点:
占用大量磁盘空间(导致备份、写入、读取操作等各种操作和性能问题)
使用困难
推荐文件路径而不是实际文件内容存储
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
