Qt之FTP上傳/下載文件操做

一個簡單的Ftp客戶端文件上傳/下載操做示例。

上傳文件

QNetworkAccessManager manager;
QUrl url;
/* 設置通信協議 */
url.setScheme("ftp");    
/* 設置用戶名 */  
url.setUserName("root");  
/* 設置密碼 */ 
url.setPassword("123456"); 
/* 設置主機,也能夠是域名 */
url.setHost("127.0.0.1");
/* 設置端口號,通常爲21 */  
url.setPort(21);         
/* 設置路徑 */ 
url.setPath("/tmp/hello.png"); 

/* 裝載本地文件 */
QFile file("/Desktop/hello.png"); 
file.open(QIODevice::ReadOnly);
/* 讀取本地文件數據 */
QByteArray data = file.readAll(); 
file.close();

QNetworkRequest request(url);
/* 上傳數據,上傳成功後會在遠端建立/tmp/hello.png文件 */
QNetworkReply* reply = manager.put(request, data); 

QEventLoop eventLoop; 
QObject::connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
/* 進入等待,但事件循環依然進行 */
eventLoop.exec(); 

if (reply->error() != QNetworkReply::NoError) {
    qDebug() << "Error: " << reply->errorString();
}

下載文件

QNetworkAccessManager manager;
QUrl url;
/* 設置通信協議 */
url.setScheme("ftp");      
/* 設置用戶名 */
url.setUserName("root");   
/* 設置密碼 */
url.setPassword("123456"); 
/* 設置主機,也能夠是域名 */
url.setHost("127.0.0.1");  
/* 設置端口號,通常爲21 */
url.setPort(21);           
/* 設置路徑 */
url.setPath("/tmp/test.txt"); 

QNetworkRequest request(url);
/* 執行Get請求 */
QNetworkReply* reply = manager.get(request); 

QEventLoop eventLoop;
QObject::connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
/* 進入等待,但事件循環依然進行 */
eventLoop.exec(); 

if (reply->error() == QNetworkReply::NoError) {
    /* 建立本地文件 */
    QFile file("test.txt"); 
    file.open(QIODevice::WriteOnly);
    /* 寫入文件 */
    file.write(reply->readAll()); 
    file.close();
}
else {
    qDebug() << "Error: " << reply->errorString();
}

總結

  • 上傳文件:配置url->加載數據->put操做
  • 下載文件:配置url->get操做->獲取數據保存到文件
  • 如服務端沒有身份驗證,客戶端能夠省略用戶名和密碼操做。

關注Qt君公衆號獲取更多知識。oop

相關文章
相關標籤/搜索