您好,登錄后才能下訂單哦!
這篇文章主要介紹“Qt QFtp客戶端怎么實現上傳下載文件”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Qt QFtp客戶端怎么實現上傳下載文件”文章能幫助大家解決問題。
實現FTP客戶端有幾種方式。
Qt4 QFtp類
Qt5 QNetworkAccessManager類
QNetworkAccessManager支持大多數的網絡協議,比如http、ftp等,這里主要講解QNetworkAccessManager實現的FTP客戶端。
需要添加 Qt += network 模塊。
QNetworkReply類包含使用QNetworkAccessManager發送的請求的數據和頭部。與QNetworkRequest類似,它包含一個URL和標題(包括解析的和原始的形式),一些關于應答狀態和應答本身內容的信息。
常用信號:
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) | 下載進度信號 |
void error(QNetworkReply::NetworkError code) | 有錯誤發生發出信號 |
void finished() | 結束 |
void readyRead() | 有數據來時會發出信號 |
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) | 發布一個請求以獲取目標請求的內容 |
快速搭建一個本地的FTP服務器
我按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客戶端怎么實現上傳下載文件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。