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