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;
x/x まで 0/x を出力します。その後、完了信号が送信されるまでに、おそらく最大 20 秒ほど長い時間がかかります。なぜこの遅延?
私は終了した信号を無視して、進行中のときに自分で信号を発信sent==total
しようとしまし たが、ファイルはもう一方の端で破損しています。(私はjpgのみを送信するので、実際には破損していません。結果のファイルは上半分のみのjpgです。大きな部分は灰色です。)
100% が実際にプロセスが完了したことを意味するプログレス バーをユーザーに提供したいと考えています。5 秒間アップロードしてから、100% で 20 秒間維持するのはあまり良くありません。