介绍
Qt 上传文件常用方式:QFtp、QNetworkAccessManager。
QFtp是Qt4中负责Ftp传输的类,想在Qt5中使用,需进行编译,参考链接 5. Qt5 实现Ftp功能_qt ftp 文件管理器_FlyingO123的博客-CSDN博客;
QNetworkAccessManager是Qt5中负责网络请求的模块,通过put实现Ftp上传功能,通过get实现下载功能。
环境搭建
window10搭建ftp服务器,下面两篇博主已经介绍的很详细了,这里就不再赘述了。在本机搭建自己的ftp服务器--最简单的方法(详细教程)_ftp服务器怎么搭建_路baby的博客-CSDN博客
win10 ftp服务器怎么搭建 win10 ftp服务器搭建教程【详解】-太平洋IT百科
上传文件示例代码
1、创建Qt项目,并添加network
QT += core gui network
2、mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QFile>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
void startRequest(QUrl url);
private:
Ui::MainWindow *ui;
QNetworkAccessManager *manager;
QNetworkRequest myNetworkRequest;
QNetworkReply *reply;
QUrl url;
QFile *file;
private slots:
void httpFinished();
void on_pushButton_clicked();
};
#endif // MAINWINDOW_H
3、mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QNetworkAccessManager>
#include <QtNetwork>
#include <QFile>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
manager = new QNetworkAccessManager(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::startRequest(QUrl url)
{
QString fileName = "E:\\aaa.txt";
QFile file(fileName);
QByteArray by_txt;
if (file.open(QIODevice::ReadOnly))
{
by_txt = file.readAll();
file.close();
reply = manager->put(QNetworkRequest(url),by_txt);
}
connect(reply,&QNetworkReply::finished,this,&MainWindow::httpFinished);
}
void MainWindow::httpFinished()
{
if (file) {
file->close();
delete file;
file = 0;
}
reply->deleteLater();
reply = 0;
qDebug()<<"send complete";
}
void MainWindow::on_pushButton_clicked()
{
QUrl url("ftp://*.*.*.*/bbb.txt");
url.setPort(21);
//url.setUserName("root");
//url.setPassword("admin");
startRequest(url);
}