欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.簡介

實現FTP客戶端有幾種方式。

  • Qt4 QFtp類
  • Qt5 QNetworkAccessManager類

QNetworkAccessManager支持大多數的網絡協議,比如http、ftp等,這里主要講解QNetworkAccessManager實現的FTP客戶端。

需要添加 Qt += network 模塊。

2.用到的主要類

2.1QNetworkReply

QNetworkReply類包含使用QNetworkAccessManager發(fā)送的請求的數據和頭部。與QNetworkRequest類似,它包含一個URL和標題(包括解析的和原始的形式),一些關于應答狀態(tài)和應答本身內容的信息。

常用信號:

void downloadProgress(qint64 bytesReceived, qint64 bytesTotal)下載進度信號
void error(QNetworkReply::NetworkError code)有錯誤發(fā)生發(fā)出信號
void finished()結束
void readyRead()有數據來時會發(fā)出信號

2.2QNetworkRequest

QNetworkRequest類持有一個要用QNetworkAccessManager發(fā)送的請求,QNetworkRequest是網絡訪問API的一部分,是保存通過網絡發(fā)送請求所需信息的類。它包含一個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)發(fā)布一個請求以獲取目標請求的內容

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上傳下載內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • QT使用udp實現發(fā)送與接收圖片

    QT使用udp實現發(fā)送與接收圖片

    這篇文章主要為大家詳細介紹了QT如何使用udp協議實現發(fā)送與接收圖片功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • C語言柔性數組實例詳解

    C語言柔性數組實例詳解

    這篇文章主要介紹了C語言柔性數組,通過實例分析了不完整類型、結構體及柔性數組等概念,需要的朋友可以參考下
    2014-09-09
  • C/C++中多態(tài)性詳解及其作用介紹

    C/C++中多態(tài)性詳解及其作用介紹

    這篇文章主要介紹了C/C++中多態(tài)性(polymorphism)詳解及其作用介紹,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C++實例詳解lambda表達式的使用

    C++實例詳解lambda表達式的使用

    Lambda表達式是現代C++在C ++ 11和更高版本中的一個新的語法糖 ,在C++11、C++14、C++17和C++20中Lambda表達的內容還在不斷更新。 lambda表達式(也稱為lambda函數)是在調用或作為函數參數傳遞的位置處定義匿名函數對象的便捷方法
    2022-05-05
  • C++實現LeetCode(128.求最長連續(xù)序列)

    C++實現LeetCode(128.求最長連續(xù)序列)

    這篇文章主要介紹了C++實現LeetCode(128.求最長連續(xù)序列),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • c語言中unsigned修飾符的使用

    c語言中unsigned修飾符的使用

    在C語言中,unsigned是一種無符號整數修飾符,本文主要介紹了c語言中unsigned修飾符的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • C語言進階棧幀示例詳解教程

    C語言進階棧幀示例詳解教程

    這篇文章主要為大家介紹了C語言進階棧幀的示例詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • c語言冒泡排序和選擇排序的使用代碼

    c語言冒泡排序和選擇排序的使用代碼

    算法中排序是十分重要的,而每一個學習計算機的都會在初期的時候接觸到這種排序,下面這篇文章主要給大家介紹了關于c語言冒泡排序和選擇排序使用的相關資料,需要的朋友可以參考下
    2022-04-04
  • C++?Boost?Conversion超詳細講解

    C++?Boost?Conversion超詳細講解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C++示例講解string容器

    C++示例講解string容器

    c++相比c的一個好處就是實現了很多的容器和泛型算法,使得程序員的工作得到了很大的簡化,本文重點給大家介紹C++string容器基本概念講解,需要的朋友參考下吧
    2022-07-07

最新評論