数据上传,下载功能(一)
2013-12-12 16:58
281 查看
最近实现一个小功能,按照需求完成数据的上传,下载功能.存储内容为一些图片和10M以内的文本,要求存储二进制格式,使用MySql数据库
1. 首先,安装数据库,在我自己的Win7的机器上安装MySql5.5数据库服务器,方便做实验
下载地址http://dev.mysql.com/downloads/repo/
2.安装. 安装目录C:\Program Files (x86)\MySQL
在安装目录下MySQL Server 5.5文件夹下,有很多ini配置文件,
my.ini是公用的配置文件,
my-large.ini和my-medium.ini和my-small.ini和my-innodb-heavy-4G.ini是根据数据库所安装的机器大小来自行选取的,MySql数据库默认是每次上传max_allowed_packet = 1M的(当初所有的四个配置文件都改成10M了但是还是上传不了大于1M的文件,后来我把这个max_allowed_packet = 10M添加到my.ini文件中,这才搞定,我猜,我目前的机器估计是它识别不出来是哪个类型,所以不知道用那个文件)
3.安装SQLyog,///////////////////////是一个sql数据库操作客户端,方便自己操作,查看结果.
4.设置SQLyog可被本机以外访问, 在数据库中新添加一个表,表中添加响应的字段,其中保存数据的为blob类型字段
MySQL数据库要想插入图片和二进制文件,其字段需要是BLOB类型。
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。
在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。
BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。
//MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
5. 前提都准备好了
6.开始写程序,连接数据库
.h文件
cpp文件
配置文件是InitDBXMLConfig()读取本地文件
插入数据,首先准备数据,数据思路是:界面上有个treeWidget显示数据,用户选择数据点击上传,可以给上传的数据添加三十个字以内的描述,,也可以在树表格中选择要下载的数据点击下载.上传之前,转化为而今文件压缩,下载到本地后解压后,在转化为本地文件.
1. 首先,安装数据库,在我自己的Win7的机器上安装MySql5.5数据库服务器,方便做实验
下载地址http://dev.mysql.com/downloads/repo/
2.安装. 安装目录C:\Program Files (x86)\MySQL
在安装目录下MySQL Server 5.5文件夹下,有很多ini配置文件,
my.ini是公用的配置文件,
my-large.ini和my-medium.ini和my-small.ini和my-innodb-heavy-4G.ini是根据数据库所安装的机器大小来自行选取的,MySql数据库默认是每次上传max_allowed_packet = 1M的(当初所有的四个配置文件都改成10M了但是还是上传不了大于1M的文件,后来我把这个max_allowed_packet = 10M添加到my.ini文件中,这才搞定,我猜,我目前的机器估计是它识别不出来是哪个类型,所以不知道用那个文件)
3.安装SQLyog,///////////////////////是一个sql数据库操作客户端,方便自己操作,查看结果.
4.设置SQLyog可被本机以外访问, 在数据库中新添加一个表,表中添加响应的字段,其中保存数据的为blob类型字段
MySQL数据库要想插入图片和二进制文件,其字段需要是BLOB类型。
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。
在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。
BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。
//MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
5. 前提都准备好了
6.开始写程序,连接数据库
.h文件
#include <QList> #include <QMutex> #include <QtSql/QSqlDatabase> #include <QByteArray> #include <QVector> #include "dbmanager.h" class MySQLManager : public DBManager { public: MySQLManager(); ~MySQLManager(); static MySQLManager *Instance();//得到数据库操作类实例 //登录验证 virtual int QueryLogon(const QString& tbName, const QString& account, const QString& PWD = ""); virtual bool insertData(const QString &datauser, const QString &datahost, const QString &dataname, const QString &datetime, const QByteArray &data, const QString &datadescription); virtual QVector<QStringList> selectData(const QString& sql); virtual QByteArray downData(const QString& sql); virtual bool delData(const QString& sql); private: void InitDBXMLConfig(); private: QSqlDatabase m_db_mysql; QMutex m_db_lock; QString m_dbName; QString m_host; int m_port; QString m_user; QString m_passwd; };
cpp文件
#include <QMessageBox> #include <QFile> #include <QDebug> #include <QVariant> #include <QDomDocument> #include <QXmlStreamReader> #include <QMutexLocker> #include <QtSql/QSqlError> #include <QtSql/QSqlQuery> #include <QtSql/QSqlRecord> #include <QTime> #include <QDateTime> #include "MySQLManager.h" MySQLManager::MySQLManager() { InitDBXMLConfig(); m_db_mysql = QSqlDatabase::addDatabase("QMYSQL","QMYSQL"); m_db_mysql.setDatabaseName(m_dbName); m_db_mysql.setHostName(m_host); m_db_mysql.setPort(m_port); m_db_mysql.setUserName(m_user); m_db_mysql.setPassword(m_passwd); if (!m_db_mysql.open()) { QSqlError err = m_db_mysql.lastError(); m_db_mysql.close(); QMessageBox::critical(NULL,tr("提示"),err.text()); } } MySQLManager::~MySQLManager() { if (m_db_mysql.isOpen()) { m_db_mysql.close(); } }连接数据库.
配置文件是InitDBXMLConfig()读取本地文件
QString filepath = QCoreApplication::applicationDirPath()+tr("/Config/DB.xml"); QFile file(filepath); QXmlStreamReader xmlReader; if(file.open(QFile::ReadOnly|QFile::Text)) { xmlReader.setDevice(&file); QDomDocument pDomDoc; if (!pDomDoc.setContent(&file)) { file.close(); return; } QDomElement docElem = pDomDoc.documentElement(); QDomNode n = docElem.firstChild(); while (!n.isNull()) { QDomElement e = n.toElement(); //将节点转换为元素 if (!e.isNull()) { if (e.attribute("name") == "dbName") m_dbName = e.attribute("value"); else if (e.attribute("name") == "host") m_host = e.attribute("value"); else if (e.attribute("name") == "user") m_user = e.attribute("value"); else if (e.attribute("name") == "passwd") m_passwd = e.attribute("value"); else if (e.attribute("name") == "port") m_port = e.attribute("value").toInt(); } n = n.nextSibling(); } } file.close();7.数据库连接成功后,数据处理
插入数据,首先准备数据,数据思路是:界面上有个treeWidget显示数据,用户选择数据点击上传,可以给上传的数据添加三十个字以内的描述,,也可以在树表格中选择要下载的数据点击下载.上传之前,转化为而今文件压缩,下载到本地后解压后,在转化为本地文件.
相关文章推荐
- 数据上传,下载功能(三)界面QTreeWidget
- 数据上传,下载功能(四)之插入数据QSqlQuery操作
- Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能
- SecureCRT 工具 上传下载数据 与 ASCII、Xmodem、Ymodem 、Zmodem 说明
- 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节
- 用java实现上传下载功能
- SpringMVC——返回JSON数据&&文件上传下载
- Java代码使用FTPClient实现ftp文件上传下载和删除的功能
- 详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
- ftp 命令行下载上传数据
- JavaWeb实现文件上传下载功能实例解析
- 网络数据请求实践一:android-async-http实现下载和上传
- 文件上传和下载功能实现
- Struts2-上传/下载文件功能实现
- EBS开发附件上传和下载功能(转)
- Nginx安装-让文件服务器fastdfs提供有web方式的上传下载功能
- 微信公众号--设备功能----微信硬件数据上传
- JavaWeb实现文件上传下载功能实例解析
- C#给ftp上传、下载文件功能
- SpringBoot实现文件上传下载功能小结