日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Qt?QFtp客戶端實現上傳下載文件_C 語言

作者:Mr.codeee ? 更新時間: 2022-09-09 編程語言

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

欄目分類
最近更新