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

三、上传音频文件代码

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!"<<l_query.lastError().text();
    }
    else
    {
        QSqlDatabase::database().commit();
    }
    return  l_ok;
}

四、下载音频代码

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(); // 关闭文件
}
  

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值