相关文章推荐
干练的炒粉  ·  QComboBox ...·  1 周前    · 
强健的沙发  ·  [Solved] WPF ...·  1 年前    · 
想出国的碗  ·  Exception at ...·  1 年前    · 
阳刚的饭卡  ·  GAN ...·  2 年前    · 

Qt QFtp客户端实现上传下载文件

作者:Mr.codeee

本文主要介绍了Qt QFtp客户端实现上传下载文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

实现FTP客户端有几种方式。

  • Qt4 QFtp类
  • Qt5 QNetworkAccessManager类

QNetworkAccessManager支持大多数的网络协议,比如http、ftp等,这里主要讲解QNetworkAccessManager实现的FTP客户端。

需要添加 Qt += network 模块。

2.用到的主要类

2.1QNetworkReply

QNetworkReply类包含使用QNetworkAccessManager发送的请求的数据和头部。与QNetworkRequest类似,它包含一个URL和标题(包括解析的和原始的形式),一些关于应答状态和应答本身内容的信息。

常用信号:

void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) 下载进度信号
void error(QNetworkReply::NetworkError code) 有错误发生发出信号
void finished() 结束
void readyRead() 有数据来时会发出信号

2.2QNetworkRequest

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) 发布一个请求以获取目标请求的内容

3.1本地搭建一个FTP服务器。

快速搭建一个本地的FTP服务器

3.2示例

我按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客户端实现上传下载文件的文章就介绍到这了,更多相关Qt QFtp上传下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • C++实现特殊矩阵的压缩存储算法
    C++实现特殊矩阵的压缩存储算法
    2022-08-08
  • C++函数模板与类模板相同与不同介绍
    C++函数模板与类模板相同与不同介绍
    2022-08-08
  • C++ accumulate函数详细介绍和具体案例
    C++ accumulate函数详细介绍和具体案例
    2022-08-08
  • C语言指针和数组深入探究使用方法
    C语言指针和数组深入探究使用方法
    2022-08-08
  • 基于QT实现文件上传和下载功能
    基于QT实现文件上传和下载功能
    2022-08-08
  • C++ accumulate函数详细介绍和具体案例
    C++ accumulate函数详细介绍和具体案例
    2022-08-08
  • C++中 Sort函数详细解析
    C++中 Sort函数详细解析
    2022-08-08
  • QT实现文件传输功能
    QT实现文件传输功能
    2022-08-08
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号