Qt QFtp客戶端實現上傳下載文件
1.簡介
實現FTP客戶端有幾種方式。
- Qt4 QFtp類
- Qt5 QNetworkAccessManager類
QNetworkAccessManager支持大多數的網絡協(xié)議,比如http、ftp等,這里主要講解QNetworkAccessManager實現的FTP客戶端。
需要添加 Qt += network 模塊。
2.用到的主要類
2.1QNetworkReply
QNetworkReply類包含使用QNetworkAccessManager發(fā)送的請求的數據和頭部。與QNetworkRequest類似,它包含一個URL和標題(包括解析的和原始的形式),一些關于應答狀態(tài)和應答本身內容的信息。
常用信號:
| void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) | 下載進度信號 |
| void error(QNetworkReply::NetworkError code) | 有錯誤發(fā)生發(fā)出信號 |
| void finished() | 結束 |
| void readyRead() | 有數據來時會發(fā)出信號 |
2.2QNetworkRequest
QNetworkRequest類持有一個要用QNetworkAccessManager發(fā)送的請求,QNetworkRequest是網絡訪問API的一部分,是保存通過網絡發(fā)送請求所需信息的類。它包含一個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) | 發(fā)布一個請求以獲取目標請求的內容 |
3.示例
3.1本地搭建一個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上傳下載內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++編程使用findfirst和findnext查找及遍歷文件實現示例
這篇文章主要為大家介紹了C++編程如何使用findfirst和findnext查找及遍歷文件實現示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
C++段錯誤(Segmentation fault)快速定位的解決方法
寫過C++的朋友都知道,有時候程序編譯通過,并不能代表程序就是對的,在linux下做開發(fā)時,經常會遇到跑崩潰的情況,但是在終端只會報Segmentation fault,如果工程代碼量少,你還能重新debug一下慢慢找,本文給大家介紹了C++段錯誤的快速定位,需要的朋友可以參考下2024-07-07

