Qt QFtp客戶端實現上傳下載文件
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);
上傳成功
到此這篇關於Qt QFtp客戶端實現上傳下載文件的文章就介紹到這瞭,更多相關Qt QFtp上傳下載內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!