Qt之FTP上傳/下載文件操作
- 2019 年 11 月 24 日
- 筆記
一個簡單的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操作->獲取數據保存到文件
- 如服務端沒有身份驗證,客戶端可以省略用戶名和密碼操作。