Qt 实例21 QFtp客户端(上传、下载文件)

1.简介

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

  • Qt4 QFtp类

  • Qt5 QNetworkAccessManager类

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

需要添加 Qt += network 模块。

2.用到的主要类

2.1QNetworkReply

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

常用信号:

14244c69ed8e02db0d1c1ce540d355a9.png

2.2QNetworkRequest

QNetworkRequest类持有一个要用QNetworkAccessManager发送的请求,QNetworkRequest是网络访问API的一部分,是保存通过网络发送请求所需信息的类。它包含一个URL和一些可用于修改请求的辅助信息。

常用方法:

7a1d6aed774773042b97cfb96cbe08b2.png

2.3QNetworkAccessManager

常用方法:

374b767e898c333ecf70cc13a467388d.png

3. 具体实现方式及代码如下:

3.1 界面3a3437c23649fcccb319bc08b9248db8.png

3.1 代码

文件下载代码:

首先弹出一个文件保存对话框,我在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);

原文链接:https://blog.csdn.net/wzz953200463/article/details/125667969

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值