最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt QFtp客戶端實(shí)現(xiàn)上傳下載文件

 更新時(shí)間:2022年07月18日 11:49:19   作者:Mr.codeee  
本文主要介紹了Qt QFtp客戶端實(shí)現(xiàn)上傳下載文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.簡(jiǎn)介

實(shí)現(xiàn)FTP客戶端有幾種方式。

  • Qt4 QFtp類
  • Qt5 QNetworkAccessManager類

QNetworkAccessManager支持大多數(shù)的網(wǎng)絡(luò)協(xié)議,比如http、ftp等,這里主要講解QNetworkAccessManager實(shí)現(xiàn)的FTP客戶端。

需要添加 Qt += network 模塊。

2.用到的主要類

2.1QNetworkReply

QNetworkReply類包含使用QNetworkAccessManager發(fā)送的請(qǐng)求的數(shù)據(jù)和頭部。與QNetworkRequest類似,它包含一個(gè)URL和標(biāo)題(包括解析的和原始的形式),一些關(guān)于應(yīng)答狀態(tài)和應(yīng)答本身內(nèi)容的信息。

常用信號(hào):

void downloadProgress(qint64 bytesReceived, qint64 bytesTotal)下載進(jìn)度信號(hào)
void error(QNetworkReply::NetworkError code)有錯(cuò)誤發(fā)生發(fā)出信號(hào)
void finished()結(jié)束
void readyRead()有數(shù)據(jù)來時(shí)會(huì)發(fā)出信號(hào)

2.2QNetworkRequest

QNetworkRequest類持有一個(gè)要用QNetworkAccessManager發(fā)送的請(qǐng)求,QNetworkRequest是網(wǎng)絡(luò)訪問API的一部分,是保存通過網(wǎng)絡(luò)發(fā)送請(qǐng)求所需信息的類。它包含一個(gè)URL和一些可用于修改請(qǐng)求的輔助信息。

常用方法:

void setUrl(const QUrl &url)設(shè)置url
void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)設(shè)置頭部

2.3QNetworkAccessManager

常用方法:

QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data)將數(shù)據(jù)內(nèi)容上載到目標(biāo)請(qǐng)求
QNetworkReply *get(const QNetworkRequest &request)發(fā)布一個(gè)請(qǐng)求以獲取目標(biāo)請(qǐng)求的內(nèi)容

3.示例

3.1本地搭建一個(gè)FTP服務(wù)器。

快速搭建一個(gè)本地的FTP服務(wù)器

3.2示例

我按3.1中搭建好ftp服務(wù)器。

下載代碼:

首先彈出一個(gè)文件保存對(duì)話框,我在ftpserver中提前放好了一個(gè)data.txt的文件,然后設(shè)置QURL,設(shè)置用戶名,密碼,端口,采用get方法。有數(shù)據(jù)來后會(huì)收到readyRead信號(hào),然后往文件中寫入數(shù)據(jù)就行了。

void WFtp::on_btnDownLoad_clicked()
{
    //選擇一個(gè)保存路徑
    //設(shè)置打開路徑
    QString filePath = "F://";
 
    //對(duì)話框標(biāo)題
    QString dlgTitle="保存文件";
 
    //文件過濾器
    QString filter="文本文件(*.txt)";
 
    //打開對(duì)話框
    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());
}

上傳代碼:

首先彈出一個(gè)文件選擇對(duì)話框,選擇要上傳的文件,讀取文件的數(shù)據(jù)到byte變量中,設(shè)置傳入到ftp sever中的文件名叫upLoad.txt,最后使用put方式上傳文件。

    //選擇一個(gè)保存路徑
    //設(shè)置打開路徑
    QString filePath = "F://";
 
    //對(duì)話框標(biāo)題
    QString dlgTitle="保存文件";
 
    //文件過濾器
    QString filter="文本文件(*.txt)";
 
    //打開對(duì)話框
    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);

上傳成功

 到此這篇關(guān)于Qt QFtp客戶端實(shí)現(xiàn)上傳下載文件的文章就介紹到這了,更多相關(guān)Qt QFtp上傳下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你分清C++的定義,聲明和初始化

    一文帶你分清C++的定義,聲明和初始化

    這篇文章主要為大家詳細(xì)介紹了C++的定義,聲明,初始化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 輸入3個(gè)字符串,將它們按照字母由大到小排序(示例代碼)

    輸入3個(gè)字符串,將它們按照字母由大到小排序(示例代碼)

    我們可以用string方法定義字符串變量。以下是具體實(shí)現(xiàn)代碼。需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-10-10
  • C語(yǔ)言水仙花數(shù)的實(shí)現(xiàn)

    C語(yǔ)言水仙花數(shù)的實(shí)現(xiàn)

    這篇文章主要介紹了C語(yǔ)言水仙花數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C++編程使用findfirst和findnext查找及遍歷文件實(shí)現(xiàn)示例

    C++編程使用findfirst和findnext查找及遍歷文件實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了C++編程如何使用findfirst和findnext查找及遍歷文件實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • C++?Qt利用GPU加速計(jì)算的示例詳解

    C++?Qt利用GPU加速計(jì)算的示例詳解

    這篇文章主要為大家詳細(xì)介紹了在?C++?和?Qt?中如何利用GPU加速計(jì)算,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • C++ vector模擬實(shí)現(xiàn)的代碼詳解

    C++ vector模擬實(shí)現(xiàn)的代碼詳解

    vector是表示可變大小數(shù)組的序列容器,就像數(shù)組一樣,vector也采用的連續(xù)存儲(chǔ)空間來存儲(chǔ)元素,本質(zhì)講,vector使用動(dòng)態(tài)分配數(shù)組來存儲(chǔ)它的元素,本文將給大家詳細(xì)介紹一下C++ vector模擬實(shí)現(xiàn),需要的朋友可以參考下
    2023-07-07
  • 深入理解C語(yǔ)言指針及占據(jù)內(nèi)存空間

    深入理解C語(yǔ)言指針及占據(jù)內(nèi)存空間

    這篇文章主要介紹了C語(yǔ)言指針及占據(jù)內(nèi)存空間的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之動(dòng)態(tài)分配實(shí)現(xiàn)串

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之動(dòng)態(tài)分配實(shí)現(xiàn)串

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之動(dòng)態(tài)分配實(shí)現(xiàn)串的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)中動(dòng)態(tài)分配實(shí)現(xiàn)串的實(shí)例,需要的朋友可以參考下
    2017-10-10
  • C++段錯(cuò)誤(Segmentation fault)快速定位的解決方法

    C++段錯(cuò)誤(Segmentation fault)快速定位的解決方法

    寫過C++的朋友都知道,有時(shí)候程序編譯通過,并不能代表程序就是對(duì)的,在linux下做開發(fā)時(shí),經(jīng)常會(huì)遇到跑崩潰的情況,但是在終端只會(huì)報(bào)Segmentation fault,如果工程代碼量少,你還能重新debug一下慢慢找,本文給大家介紹了C++段錯(cuò)誤的快速定位,需要的朋友可以參考下
    2024-07-07
  • C++卸載程序功能示例

    C++卸載程序功能示例

    用C++寫一個(gè)自己的卸載程序來完成程序的卸載工作,同時(shí)運(yùn)行后要?jiǎng)h除卸載程序本身,并刪除卸載程序所在的文件夾
    2013-11-11

最新評(píng)論

泾川县| 威信县| 军事| 宜宾县| 辽中县| 正宁县| 晋州市| 分宜县| 灵山县| 台湾省| 鄂伦春自治旗| 左权县| 宜丰县| 仲巴县| 大名县| 原阳县| 合川市| 德江县| 锦屏县| 岐山县| 三明市| 南雄市| 大冶市| 烟台市| 长白| 维西| 英吉沙县| 黑河市| 奈曼旗| 平谷区| 高台县| 合山市| 望城县| 明溪县| 屏山县| 辛集市| 马鞍山市| 西乌珠穆沁旗| 阿坝县| 津南区| 邢台市|