我使用 QNAM 来处理使用 ftp 协议的上传。整个过程有效,但我有一个奇怪的行为:
这是我的方法:
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();
}
当我上传文件时,会发出 uploadProgress :
qDebug() << sent << "/" << total;
输出 0/x 直到 x/x 。然后需要很长时间,可能长达 20 秒才能发出完成的信号。为什么会出现这种延迟?
我尝试忽略完成的信号并在进度到达时自己发出信号,sent==total
但另一端的文件已损坏。(它并没有真正损坏,因为我只发送 jpg,生成的文件只有上半部分 jpg。很大一部分只是灰色。)
我想为我的用户提供一个进度条,其中 100% 真正意味着该过程已完成。上传 5 秒,然后以 100% 的速度停留 20 秒并不是很好。