这篇文章主要介绍“Qt QFtp客户端怎么实现上传下载文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Qt QFtp客户端怎么实现上传下载文件”文章能帮助大家解决问题。
实现FTP客户端有几种方式。
Qt4 QFtp类
Qt5 QNetworkAccessManager类
QNetworkAccessManager支持大多数的网络协议,比如http、ftp等,这里主要讲解QNetworkAccessManager实现的FTP客户端。
需要添加 Qt += network 模块。
QNetworkReply类包含使用QNetworkAccessManager发送的请求的数据和头部。与QNetworkRequest类似,它包含一个URL和标题(包括解析的和原始的形式),一些关于应答状态和应答本身内容的信息。
常用信号:
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) | 下载进度信号 |
void error(QNetworkReply::NetworkError code) | 有错误发生发出信号 |
void finished() | 结束 |
void readyRead() | 有数据来时会发出信号 |
QNetworkRequest类持有一个要用QNetworkAccessManager发送的请求,QNetworkRequest是网络访问API的一部分,是保存通过网络发送请求所需信息的类。它包含一个URL和一些可用于修改请求的辅助信息。
常用方法:
void setUrl(const QUrl &url) | 设置url |
void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue) | 设置头部 |
2.3QNetworkAccessManager
常用方法:
QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data) | 将数据内容上载到目标请求 |
QNetworkReply *get(const QNetworkRequest &request) | 发布一个请求以获取目标请求的内容 |
快速搭建一个本地的FTP服务器
我按3.1中搭建好ftp服务器。
下载代码:
首先弹出一个文件保存对话框,我在ftpserver中提前放好了一个data.txt的文件,然后设置QURL,设置用户名,密码,端口,采用get方法。有数据来后会收到readyRead信号,然后往文件中写入数据就行了。
void WFtp::on_btnDownLoad_clicked() { //选择一个保存路径 //设置打开路径 QString filePath = "F://"; //对话框标题 QString dlgTitle="保存文件"; //文件过滤器 QString filter="文本文件(*.txt)"; //打开对话框 QString fileName=QFileDialog::getSaveFileName(this,dlgTitle,filePath,filter); g_file.setFileName(fileName); g_file.open(QIODevice::WriteOnly); QString str = ui->lineEdit->text() + "data.txt"; QUrl url(str); url.setPort(21); url.setUserName(ui->leUser->text()); url.setPassword(ui->lePasswd->text()); QNetworkRequest request(url); m_reply = m_accessManager->get(request); connect(m_accessManager, &QNetworkAccessManager::finished, this, &WFtp::slotReplyFinished); connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(slotError(QNetworkReply::NetworkError))); connect(m_reply, &QNetworkReply::downloadProgress, this, &WFtp::slotDownloadProgress); connect(m_reply, &QNetworkReply::readyRead, this, &WFtp::slotRead); } void WFtp::slotRead() { g_file.write(m_reply->readAll()); }
上传代码:
首先弹出一个文件选择对话框,选择要上传的文件,读取文件的数据到byte变量中,设置传入到ftp sever中的文件名叫upLoad.txt,最后使用put方式上传文件。
//选择一个保存路径 //设置打开路径 QString filePath = "F://"; //对话框标题 QString dlgTitle="保存文件"; //文件过滤器 QString filter="文本文件(*.txt)"; //打开对话框 QString fileName=QFileDialog::getOpenFileName(this,dlgTitle,filePath,filter); g_file.setFileName(fileName); g_file.open(QIODevice::ReadOnly); QByteArray byte = g_file.readAll(); g_file.close(); QString str = ui->lineEdit->text() + "upLoad.txt"; QUrl url(str); url.setPort(21); url.setUserName(ui->leUser->text()); url.setPassword(ui->lePasswd->text()); QNetworkRequest request(url); m_reply = m_accessManager->put(request,byte); connect(m_accessManager, &QNetworkAccessManager::finished, this, &WFtp::slotReplyFinished); connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(slotError(QNetworkReply::NetworkError))); connect(m_reply, &QNetworkReply::downloadProgress, this, &WFtp::slotDownloadProgress);
上传成功
关于“Qt QFtp客户端怎么实现上传下载文件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。