간단한 테스트 텍스트 파일을 FTP 서버에 업로드하려고합니다. 이를 달성하기 위해 Qt 5.1에서는 QFtp이 사용되지 않으므로 QNetworkAccessManager을 사용하고 있습니다.QNetworkManager가 FTP 충돌로 파일 업로드
프로그램 디렉토리에 test.txt 파일을 만들고 QFile을 사용하여 QIODevice::ReadWrite | QIODevice::Text
으로 열었습니다.
문제는 연결을 설정하고 QNetworkAccessManager에게 프로그램이 충돌하는 파일 ("FTPConnectionTest가 응답하지 않음")을 업로드하도록 지시하는 것입니다. FileZilla
으로 만든 로컬 FTP 서버 나 외부 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;
}
네가 그 대답을 읽기 전에 나는 그걸 알아 냈다. 고맙습니다. –