真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql視頻怎么保存 mysql存儲過程視頻教程

學習怎樣把視頻文件存儲到mysql數(shù)據(jù)庫

背景

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了景泰免費建站歡迎大家使用!

MySQL 一直以來都有 TEXT、BLOB 等類型用來存儲圖片、視頻等大對象信息。比如一張圖片,隨便一張都 5M 以上。視頻也是,隨便一部視頻就是 2G 以上。

假設用 MySQL 來存放電影視頻等信息,一部是 2G,那么存儲 1000 部就是 2TB,2TB 也就是 1000 條記錄而已,但是對數(shù)據(jù)庫性能來說,不僅僅是看記錄數(shù)量,更主要的還得看占用磁盤空間大小??臻g大了,所有以前的經(jīng)驗啥的都失效了。

所以一般來說存放這類信息,也就是存儲他們的存放路徑,至于文件本身存放在哪里,那這就不是數(shù)據(jù)庫考慮的范疇了。數(shù)據(jù)庫只關心怎么來的快,怎么來的小。

舉例

雖然不推薦 MySQL 這樣做,但是也得知道 MySQL 該怎么做才行,做到心里有數(shù)。比如下面一張微信圖片,大概 5M 的樣子。

root@ytt:/var/lib/mysql-files# ls -sihl 微信圖片_20190711095019.jpg274501 5.4M -rw-r--r-- 1 root root 5.4M Jul 11 07:17 微信圖片_20190711095019.jpg

拷貝 100 份這樣的圖片來測試

root@ytt:/var/lib/mysql-files# for 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 ?19.jpg ?27.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.jpg ?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 ?57.jpg ?65.jpg ?73.jpg ?81.jpg ?8.jpg ? 98.jpg ?f7.tsv

我們建三張表,分別用 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`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

mysql show create table tt_image2G

*************************** 1. row ***************************

Table: tt_image2

Create Table: CREATE TABLE `tt_image2` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`image_file` longtext,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

mysql show create table tt_image3G

*************************** 1. row ***************************

Table: tt_image3

Create Table: CREATE TABLE `tt_image3` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`image_file` varchar(100) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

我們來給三張表插入 100 張圖片(插入前,建議把 max_allowed_packet 設置到最大)

tt_image1

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_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`";

檢查下三張表記錄數(shù)

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。所以這里從存儲空間來看,存放路徑最占優(yōu)勢。

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.ibd274605 ?80K -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 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;

tt_image2 類似,把 select 語句里 image_file 變?yōu)?unhex(image_file) 即可。

總結

這里我舉了個用 MySQL 來存放圖片的例子,總的來說有以下三點:

占用磁盤空間大(這樣會帶來各種各樣的功能與性能問題,比如備份,寫入,讀取操作等)

使用不易

還是推薦用文件路徑來代替實際的文件內容存放

怎樣把多媒體信息(如音頻文件,視頻文件)存到數(shù)據(jù)庫中,然后在一JSP頁面顯示,數(shù)據(jù)庫是mysql的

采用大對象類型。

mysql 大對象存取:

類型一般應該用mediumblod,

blob只能存2的16次方個byte,

mediumblod是24次方,

一般來說夠用了.longblob是32次方有些大.

MYSQL默認配置只能存1M大小的文件,要修改配置,WIN版本的在mysql.ini文件中

修改max_allowed_packet,net_buffer_length等幾個參數(shù),或直接SET GLOBAL varName=value.

linux版本可以在啟動參數(shù)后加-max_allowed_packet=xxM等幾個參數(shù).

MYSQL存大對象最好直接就setBinaryStream,又快又方便.

而不要先插入空再造型成BLOB然后再setBlob

例子:

import java.sql.*;

import java.io.*;

public class DBTest {

static String driver = "org.gjt.mm.mysql.Driver";

static String url = "jdbc:mysql://localhost:3306/test";

static String user = "root";

static String passwd = "passwd";

public static void main(String[] args) throws Exception {

Connection conn = null;

try {

Class.forName(driver);

conn = DriverManager.getConnection(url,user,passwd);

int op = 1;

//插入

if (op == 0) {

PreparedStatement ps = conn.prepareStatement("insert into tb_file values (?,?)");

ps.setString(1, "aaa.exe");

InputStream in = new FileInputStream("d:/aaa.exe");

ps.setBinaryStream(2,in,in.available());

ps.executeUpdate();

ps.close();

}

else {

//取出

PreparedStatement ps = conn.prepareStatement("select * from tb_file where filename = ?");

ps.setString(1, "aaa.exe");

ResultSet rs = ps.executeQuery();

rs.next();

InputStream in = rs.getBinaryStream("filecontent");

System.out.println(in.available());

FileOutputStream out = new FileOutputStream("d:/bbb.exe");

byte[] b = new byte[1024];

int len = 0;

while ( (len = in.read(b)) != -1) {

out.write(b, 0, len);

out.flush();

}

out.close();

in.close();

rs.close();

ps.close();

}

}

catch (Exception ex) {

ex.printStackTrace(System.out);

}

finally {

try {conn.close();}

catch (Exception ex) { }

}

}

}

怎么把圖片,視頻存儲在數(shù)據(jù)庫中

我們設計程序時一般不會將圖片、音頻和視頻資料直接存入數(shù)據(jù)庫中,這樣會讓數(shù)據(jù)庫的體積驟大,嚴重影響數(shù)據(jù)庫運行的效率。

一般會搭建一個多媒體服務器,支持流媒體格式處理。程序或者網(wǎng)站中涉及到的圖片、音頻和視頻等資料會存放在流媒體服務器上,然后可以記錄訪問其的路徑,然后把這個路徑存入數(shù)據(jù)庫,在你的應用系統(tǒng)調用時,可以通過路徑結合對應的多媒體播放插件就可以實現(xiàn)。

如何將視頻從mysql數(shù)據(jù)庫中取出并在jsp頁面播放

兩種方案:

一是在視頻放在服務器端,數(shù)據(jù)庫中存放視頻所在的路徑。

二是將視頻以兩進制的形式(對應的數(shù)據(jù)庫類型為blob或longblob)真接存放到數(shù)據(jù)庫中。

在jsp頁面中用object播放。


文章名稱:mysql視頻怎么保存 mysql存儲過程視頻教程
網(wǎng)頁URL:http://weahome.cn/article/hhsgps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部