Qt FTP上传/下载工具


实现FTP Client功能
ubuntu搭建ftp服务器
1、选用vsftpd为我们的ftp服务器,端口号默认为21
安装:~$ sudo apt‐get install vsftpd
2、配置:~$ sudo gedit /etc/vsftpdonf
3、 几个重要的参数:

1 anonymous_enable=NO 是否支持匿名访问 2 3 local_enable=YES 是否允许本地用户登录 4 5 write_enable=YES 是否给客户端写的权限 (默认只读)

4、几个重要的命令

1 ~$ sudo /etc/init.d/vsftpd restart 重启vsftp服务 (ubuntu 18) 2 3 ~$ ps ‐ef | grep ftp 查看ftp服务器是否启动 4 5 ~$ sudo netstat ‐utlpn | grep vsftp 查看vsftp状态及端口号

PS:如果想修改端口号(建议不要修改)
1、编辑/etc/vsftpd/vsftpdonf 文件,在该配置文件中添加此行:listen_port=6666
2、编辑/etc/services 文件,将其中的 ftp 21/tcp 改为 ftp 21/tcp 改为 ftp 6666/tcp

QT实现ftp的客户端

通过该项目学会
QNetworkAccessManager上传和下载,对N多协议都支持;
QNetworkAccessManager 自己会新建线程 不用使用QThread
如果不需要遍历FtpServer目录可以直接使用QNetworkAccesssManager

  • QUrl
  • QNetworkAccessManager
  • QNetworkReply

完整的ftp地址

完整代码

ftpAccessManager.h

1 #ifndef FTPACCESSMANAGER_H 2 #define FTPACCESSMANAGER_H 3 4 #include <QObject> 5 #include <QUrl> 6 #include <QNetworkAccessManager> 7 #include <QNetworkReply> 8 #include <QFile> 9 #include <QFileInfo> 10 #include <QDebug> 11 #include <QEvent> 12 13 class ftpAccessManager : public QObject 14 ; 59 60 #endif // FTPACCESSMANAGER_H

ftpAccessManagerpp

1 #include "ftpAccessManager.h" 2 3 ftpAccessManager::ftpAccessManager(QObject *parent) 4 : QObject 5 8 9 /* 10 * 设置FTP主机地址信息,包括Ip地址和端口号 11 */ 12 void ftpAccessManager::setHostPortInfo(const QString &host, quint16 prot) 13 18 19 /* 20 * 设置FTP用户密码信息 21 */ 22 void ftpAccessManager::setUserPwdInfo(const QString &userName, const QString &pwd) 23 27 28 /* 29 * 上传文件 30 * 参数1:本地文件(带路径) 参数2:服务器端文件(带路径) <服务器路径必须带上文件名,不然服务器不知道写什么样的文件> 31 */ 32 void ftpAccessManager::putFileFrClent(const QString &clientFile, const QString &serverPath) 33 52 else 53 57 } 58 59 /* 60 * 下载文件 61 * 参数1:需要写入的本地文件(带路径 不带路径则为当前目录) 参数2:服务器端的路径 62 */ void ftpAccessManager::getFileFrServer(const QString &saveNameWithPath, const QString &downloadPath) 64 78 else 79 83 } 84 85 86 void ftpAccessManager::uploadProgressSlot(qint64 bytesSent, qint64 bytesTotal) 87 91 92 93 94 void ftpAccessManager::uploadFinishedSlot() 95 102 103 void ftpAccessManager::uploadErrorSlot(QNetworkReply::NetworkError errorCode) 104 121 122 emit netErrorSignal(errorCode); 123 } 124 125 void ftpAccessManager::downloadProgressSlot(qint64 bytesSent, qint64 bytesTotal) 126 131 132 133 void ftpAccessManager::downloadFinishedSlot() 134 141 142 void ftpAccessManager::downloadErrorSlot(QNetworkReply::NetworkError errorCode) 143 152 153 /* 演示deleteLater什么时候生效 */ 154 bool ftpAccessManager::event(QEvent *event) 155

widget.h

1 #ifndef WIDGET_H 2 #define WIDGET_H 3 4 #include <QWidget> 5 #include <QMessageBox> 6 #include <QFileDialog> 7 #include "ftpAccessManager.h" 8 9 10 QT_BEGIN_NAMESPACE 11 namespace Ui 12 QT_END_NAMESPACE 13 14 class Widget : public QWidget 15 ; 41 #endif // WIDGET_H

widgetpp

1 #include "widget.h" 2 #include "ui_widget.h" 3 4 Widget::Widget(QWidget *parent) 5 : QWidget(parent) 6 , ui(new Ui::Widget) 7 18 19 Widget::~Widget() 20 23 24 25 bool Widget::getHostInfoFrUi() 26 38 return true; 39 } 40 41 void Widget::on_pushButtonUpload_clicked() 42 56 57 58 QString serverPath = ui>lineEditUploadPath>text(); 59 if(serverPath.isEmpty()) 60 64 65 mFtpAccMgr.putFileFrClent(clientFile, serverPath); 66 } 67 68 69 void Widget::on_pushButtonDownload_clicked() 70 92 93 void Widget::uploadProgressSlot(qint64 bytesReceived, qint64 bytesTotal) 94 103 104 qint32 totalSize = (qint32)(bytesTotal / (1024 * 1024)); 105 if(bytesTotal > 0 && totalSize == 0) 106 109 110 ui>progressBarUpload>setMaximum(totalSize); //这句话一定要写在setValue前面 111 ui>progressBarUpload>setValue(fileSize); 112 } 113 114 void Widget::downloadProgressSlot(qint64 bytesReceived, qint64 bytesTotal) 115 123 124 qint32 totalSize = (qint32)(bytesTotal / (1024 * 1024)); 125 if(bytesTotal > 0 && totalSize == 0) 126 129 130 ui>progressBarDownload>setMaximum(totalSize); 131 ui>progressBarDownload>setValue(fileSize); 132 } 133 134 void Widget::netErrorSlot(QNetworkReply::NetworkError errorCode) 135

需要在pro文件中添加QT += network



上一篇:QT 使用 QtCreator 格式化代码

下一篇:Modscan32 软件最全使用详解


Qt
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图