Qt在MySQL中存储音频文件

一、在存储音频视频等大文件时需要以二进制文件进行存储,首先需要了解mysql存储二进制文件的字段类型以及大小:

需要创建数据库中的图片类型为:二进制mediumblob类型,(

TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G

在估算最大实际使用上限的情况下,能用小的就用小的,效率高。

二、mysql数据库默认是不支持大文件存储的因此需要修改对应的mysql配置:

这一步操作详情可以看这里:mysql的max_allowed_packet配置_mysql设置max_allowed_packet_Hannah的博客-CSDN博客

在my.ini文件中添加如下语句。比如:改为1G.如下图所示。修改完成后,需要重启mysql。

max_allowed_packet = 1024M

Qt在MySQL中存储音频文件_第1张图片

三、上传音频文件代码

QFile file(tempMp3Path);
if(file.open(QIODevice::ReadOnly))
{
    QByteArray data = file.readAll();
    AddAudio("filename",data);
}


bool AddAudio( QString name, QByteArray arr)
{
    bool l_ok;
    QSqlQuery l_query;

    l_query.prepare("INSERT INTO audiomsg (name,content)VALUES(:name,:content)");
    QVariant blobData(arr);
    l_query.bindValue(":name",name);

    l_query.bindValue(":content",blobData);
    QSqlDatabase::database().transaction();

    l_ok = l_query.exec();
    if(!l_ok)
    {
        qDebug()<<"error inset sql!"<

四、下载音频代码

void load_File(QString filename)
{
    if (filename == "")
        return;

    QSqlTableModel * model= database->GetModel("audiomsg");
    model->setFilter(QString("name = '%1'").arg(filename));
    model->select();

    QByteArray arr =  model->record(0).value("content").toByteArray();
    QFile qfile_save_adc_bin(filename);
    qfile_save_adc_bin.open(QIODevice::WriteOnly);
    QDataStream out_adc(&qfile_save_adc_bin);
    //# 写入
    out_adc.writeRawData(arr,arr.size());
     qfile_save_adc_bin.close(); // 关闭文件
}
  

你可能感兴趣的:(mysql,数据库)