dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QNetworkAccessManager>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
void init();
private slots:
void on_pushButton_put_clicked();
void on_pushButton_get_clicked();
void managerPut(QNetworkReply*);
void manageGet(QNetworkReply*);
private:
Ui::Dialog *ui;
QNetworkAccessManager *m_manager;
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QFile>
#include <QUrl>
#include <QNetworkReply>
#include <QMessageBox>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
init();
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::init()
{
setWindowTitle("My Ftp");
m_manager = new QNetworkAccessManager(this);
ui->lineEdit_server->setText("ftp://192.168.1.56/");
ui->lineEdit_use->setText("haha");
ui->lineEdit_password->setText("123456");
ui->lineEdit_file->setText("aa.txt");
}
void Dialog::managerPut(QNetworkReply *reply)
{
qDebug() << "ftp返回值:" << reply->errorString();
switch(reply->error())//判断连接后的状态
{
case QNetworkReply::NoError:
QMessageBox::information(this,"Put information","Upload Success!");
break;
case QNetworkReply::HostNotFoundError:
QMessageBox::information(this,"Put information","Host Not Found!");
break;
case QNetworkReply::AuthenticationRequiredError:
QMessageBox::information(this,"Put information","Login Failure!");
break;
default:
QMessageBox::information(this,"Put information","Unknown Failure");
break;
}
}
void Dialog::manageGet(QNetworkReply *reply)
{
QByteArray data;
QFile file("text.txt");
switch(reply->error())
{
case QNetworkReply::NoError:
data = reply->readAll();
if(file.open(QFile::WriteOnly))
{
file.write(data);
QMessageBox::information(this,"Put information","Download Success");
}
else
{
qDebug() << "文件未打开";
}
break;
case QNetworkReply::HostNotFoundError:
QMessageBox::information(this,"Put information","Host Not Found!");
break;
case QNetworkReply::AuthenticationRequiredError:
QMessageBox::information(this,"Put information","Login Failure!");
break;
default:
QMessageBox::information(this,"Put information","Unknown Failure");
break;
}
}
void Dialog::on_pushButton_put_clicked()
{
QString filename = ui->lineEdit_file->text();
QFile file(filename);
if(file.open(QFile::ReadWrite|QIODevice::ReadWrite))
{
m_manager->disconnect(SIGNAL(finished(QNetworkReply*)));
connect(m_manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(managerPut(QNetworkReply *)));
QByteArray data = file.readAll();
QString ftpUrl = ui->lineEdit_server->text();
QUrl url(ftpUrl + filename);//这里是ftp地址+文件名
url.setUserName(ui->lineEdit_use->text());
url.setPassword(ui->lineEdit_password->text());
url.setPort(21);
m_manager->put(QNetworkRequest(url),data);
}
else
{
qDebug() << "文件未打开";
}
}
void Dialog::on_pushButton_get_clicked()
{
m_manager->disconnect(SIGNAL(finished(QNetworkReply*)));
connect(m_manager,SIGNAL(finished(QNetworkReply*)),SLOT(manageGet(QNetworkReply*)));
QString filename = ui->lineEdit_file->text();
QString ftpUrl = ui->lineEdit_server->text();
QUrl url(ftpUrl + filename);//这里是ftp地址+文件名
url.setUserName(ui->lineEdit_use->text());
url.setPassword(ui->lineEdit_password->text());
url.setPort(21);
m_manager->get((QNetworkRequest(url)));
}
参考:https://www.jb51.net/article/119090.htm
实例代码:https://download.csdn.net/download/sinat_33859977/11545481