Qt FTP上传/下载工具
实现FTP Client功能
ubuntu搭建ftp服务器
1、选用vsftpd为我们的ftp服务器,端口号默认为21
安装:~$ sudo apt‐get install vsftpd
2、配置:~$ sudo gedit /etc/vsftpdonf
3、 几个重要的参数:
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_HftpAccessManagerpp
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) 155widget.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_Hwidgetpp
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
pla文件怎么看,pla文件用什么打开?
pl1文件怎么看,pl1文件用什么打开?
pl文件怎么看,pl文件用什么打开?
pl0文件怎么看,pl0文件用什么打开?
pkt文件怎么看,pkt文件用什么打开?
pkm文件怎么看,pkm文件用什么打开?
pks文件怎么看,pks文件用什么打开?
pka文件怎么看,pka文件用什么打开?
pkh文件怎么看,pkh文件用什么打开?
pkg文件怎么看,pkg文件用什么打开?