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操作->獲取數據保存到文件
  • 如服務端沒有身份驗證,客戶端可以省略用戶名和密碼操作。