我想上传一个简单的测试文本文件到FTP服务器。为了达到这个目的,我使用了QNetworkAccessManager,因为在Qt 5.1中不推荐使用QFtp。QNetworkManager上传文件到FTP崩溃
我在程序目录中创建了一个test.txt文件并使用QFile我打开它作为QIODevice::ReadWrite | QIODevice::Text
。
问题是当我设置连接并告诉QNetworkAccessManager要上传程序崩溃的文件(“FTPConnectionTest没有响应”)。当我尝试使用外部FTP服务器或使用FileZilla
创建的本地FTP服务器时,会发生这种情况。我连接了回复发出的所有信号(功能:uploadFinish
,uploadProgress
,uploadError
),但是没有反馈被捕获。
问题:这个问题是在FTP服务器上吗,还是我在代码中做错了? 下面的代码剪断:
Main.cpp的
#include <QCoreApplication>
#include <ftp.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Ftp ftp;
return a.exec();
}
ftp.cpp
#include "ftp.h"
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>
#include <QFile>
#include <QUrl>
#include <QDebug>
Ftp::Ftp()
{
QFile file("test.txt");
if (file.open(QIODevice::ReadWrite | QIODevice::Text)) {
url = QUrl("ftp://127.0.0.1/test.txt");
url.setUserName("user");
url.setPassword("password");
qDebug() << "URL set" << url;
QNetworkAccessManager* nam = new QNetworkAccessManager();
qDebug() << "nam set";
QNetworkReply *rep = nam->put(QNetworkRequest(url), &file);
qDebug() << "after rep";
connect(rep, SIGNAL(finished()), this, SLOT(uploadFinish()));
connect(rep, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(uploadError(QNetworkReply::NetworkError)));
connect(rep, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(uploadProgress(qint64,qint64)));
}
else qDebug() << "failed to open";
}
void Ftp::uploadFinish()
{
qDebug() << "finished uploading file";
}
void Ftp::uploadProgress(qint64 a, qint64 b)
{
qDebug() << a << "/" << b;
}
void Ftp::uploadError(QNetworkReply::NetworkError state)
{
qDebug() << "State" << state;
}
是的,在我阅读你的答案之前,我已经明白了自己的想法。谢谢。 –