中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt?QFtp客戶端怎么實現上傳下載文件

發布時間:2022-07-18 13:49:46 來源:億速云 閱讀:311 作者:iii 欄目:開發技術

這篇文章主要介紹“Qt QFtp客戶端怎么實現上傳下載文件”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“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服務器。

Qt?QFtp客戶端怎么實現上傳下載文件

下載代碼:

首先彈出一個文件保存對話框,我在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客戶端怎么實現上傳下載文件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

志丹县| 辽阳县| 彭阳县| 北碚区| 桦川县| 呼玛县| 宁安市| 彝良县| 文登市| 左云县| 田东县| 奉化市| 元阳县| 阿鲁科尔沁旗| 呼伦贝尔市| 博乐市| 鄄城县| 崇信县| 东港市| 太和县| 南阳市| 万载县| 晴隆县| 蓬安县| 通渭县| 太保市| 疏勒县| 德阳市| 石首市| 龙南县| 勃利县| 桦川县| 辛集市| 什邡市| 南皮县| 台东县| 孟津县| 社旗县| 望奎县| 和田市| 长汀县|