目录
第一种写法
.h
#pragma once
#include <QMainWindow>
#include <QNetworkAccessManager>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
void Init();
void Upload();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
private:
Ui::MainWindow *ui;
QStringList files;
QNetworkAccessManager * manager = nullptr;
};
.cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QFileDialog>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
Init();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::Init()
{
manager = new QNetworkAccessManager(this);
ui->progressBar->setMaximum(100);
}
void MainWindow::Upload()
{
foreach (QString filepath, files)
{
QUrl remoteUrl("ftp://127.0.0.1:2122/" + QFileInfo(filepath).fileName());
QNetworkRequest request(remoteUrl);
request.setMaximumRedirectsAllowed(120000); // timeout in milliseconds
request.setHeader(QNetworkRequest::ContentLengthHeader, QFile(filepath).size());
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-stream");
QFile file(filepath);
file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll();
file.close();
QNetworkReply* reply = manager->put(request, data);
connect(reply, &QNetworkReply::uploadProgress, [=](qint64 bytesSent, qint64 bytesTotal) {
qDebug() << "已上传:" << bytesSent << "字节,总共上传字节:" << bytesTotal;
});
connect(reply, &QNetworkReply::finished, [=]() {
if(reply->error() != QNetworkReply::NoError) {
//error handling
}
reply->deleteLater();
});
}
}
void MainWindow::on_pushButton_clicked()
{
files = QFileDialog::getOpenFileNames(this, "选择上传文件", QDir::homePath(), "Files (*.*)");
foreach(QString file, files)
{
ui->textEdit->append(file);
}
}
void MainWindow::on_pushButton_2_clicked()
{
Upload();
}
void MainWindow::on_pushButton_3_clicked()
{
ui->textEdit->clear();
}
界面:
存在问题:中文命名的文件名称会乱码
第二种
FtpManager.h
#pragma once
#include <QObject>
#include <QUrl>
#include <QFileInfo>
#include <QNetworkReply>
#include <QNe