一、在存储音频视频等大文件时需要以二进制文件进行存储,首先需要了解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(); // 关闭文件
}
   
                


















