網站首頁 編程語言 正文
1.簡介
實現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.示例
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);
上傳成功
原文鏈接:https://blog.csdn.net/wzz953200463/article/details/125667969
- 上一篇:C#表達式和運算符詳細解析_C#教程
- 下一篇:C#流程控制詳解_C#教程
相關推薦
- 2022-11-26 R語言學習筆記之plot函數_R語言
- 2022-06-01 C#中內聯函數的用法介紹_C#教程
- 2022-03-24 Android實現旋轉動畫_Android
- 2022-04-24 C#中的==運算符用法講解_C#教程
- 2023-11-16 【云原生】服務器重啟后,如何將dockers和docker里的服務重啟
- 2022-07-17 一起詳細聊聊C#中的Visitor模式_C#教程
- 2022-08-10 Oracle數據庫如何使用exp和imp方式導數據_oracle
- 2024-03-20 spring-boot-maven-plugin報紅的解決辦法
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支