cuentas qt ftp qnetworkaccessmanager

qt - cuentas ftp cpanel



QNetworkManager subiendo archivo al bloqueo de FTP (1)

Consulte la documentación de QNetworkAccessManager::put :

los datos deben abrirse para su lectura cuando se llama a esta función y deben permanecer válidos hasta que se emita la señal finished () para esta respuesta.

El objeto de file queda fuera del alcance cuando el constructor finaliza la ejecución, por lo que QNetworkAccessManager probablemente intenta leer desde un objeto que ya se ha eliminado. Necesita convertir el file una variable miembro de clase o crearlo usando QFile* file = new QFile() .

Estoy intentando subir un archivo de texto de prueba simple a un servidor FTP. Para lograr esto estoy usando QNetworkAccessManager , ya que QFtp ha quedado en desuso en Qt 5.1.

Creé un archivo test.txt en el directorio de programas y usando QFile lo QIODevice::ReadWrite | QIODevice::Text como QIODevice::ReadWrite | QIODevice::Text QIODevice::ReadWrite | QIODevice::Text .

El problema es que cuando configuro la conexión y le digo a QNetworkAccessManager que cargue un archivo, el programa falla ("FTPConnectionTest no responde"). Sucede cuando intento usar un servidor FTP externo o uno local creado con FileZilla .

uploadFinish todas las señales emitidas por la respuesta (funciones: uploadFinish , uploadProgress , uploadError ); sin embargo, no se captaron comentarios.

Pregunta: ¿Este problema está en el lado del servidor FTP o estoy haciendo algo mal en mi código? Código cortado a continuación:

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; }