我使用QNAM来处理使用FTP协议的上传。 全过程的工作,但我有一个奇怪的现象:Qt的QNetworkAccessManager长延迟到发射结束信号
这是我的方法:
void ftp::uploadFile(const QString &origin, const QString &destination)
{
QUrl url("ftp://"+host+""+destination);
url.setUserName(user);
url.setPassword(pwd);
url.setPort(21);
localFile = new QFile(origin, this);
if (localFile->open(QIODevice::ReadOnly))
{
reply = nam->put(QNetworkRequest(url), localFile);
QObject::connect(reply, SIGNAL(uploadProgress(qint64, qint64)), SLOT(transferProgress(qint64, qint64)));
QObject::connect(reply, SIGNAL(finished()), this, SLOT(transferFinished()));
}
else qDebug() << localFile->errorString();
}
当我上传文件时,上传进度发出:
qDebug() << sent << "/" << total;
输出0/x直到x/x。 然后,它需要很长的时间,也许长达20秒成品信号被发射之前。 为什么这个延迟?
我试着忽略已完成的信号并自己发出信号当进度是sent==total
但文件在另一端损坏。 (它并没有真正损坏,因为我只发送jpg,结果文件只有上半部分只有jpg,大部分只是灰色)。
我想为我的用户提供一个进度条,其中100%真的意味着这个过程完成了。 上传5秒,然后以100%保持20秒并不是很好。
是它在运行什么传输模式?主动还是被动?很可能它已经完成上传文件,但FTP服务器没有给出确认码。 –
我怎么知道? –
我认为它通常将其设置为打开何种模式在FTP服务器上。 –