С QNetworkReply, как я могу опубликовать файл и затем получить преобразованный файл обратно с сервера?

Я могу опубликовать файл в Qt используя QNetworkReply, QNetworkAccessManager, QNetworkRequestи т. д. на сервер. Этот сервер преобразует файл и выплевывает его обратно. Как я могу получить этот скрытый файл? Нужно ли мне как-то найти URL файла, возвращающегося из заголовков, а затем QNetworkAccessManager сделать запрос на получение? Или я могу как-то получить его из существующихQNetworkReply сигналы и записать его в файл?

1 ответ

Решение

Если сервер возвращает файл в ответ на запрос, вы можете прочитать файл непосредственно из возвращенного ответа:

QNetworkAccessManager nam;

QUrl url(QString("http://www.example.com"));
url.addQueryItem("parameter", "value");

QNetworkRequest request(url);

QNetworkReply *reply = nam.get(request);

QEventLoop eventloop;
connect(reply,SIGNAL(finished()),&eventloop,SLOT(quit()));
eventloop.exec();

if (reply->error() == QNetworkReply::NoError)
{
    QByteArray bts = reply->readAll();

    QFile file("path/to/file");
    file.open(QIODevice::WriteOnly);
    file.write(bts);
    file.close();
}

Вы также можете сделать это асинхронным способом, подключив finished сигнал о QNetworkAccessManager в слот и запишите туда файл:

connect(&nam,SIGNAL(finished(QNetworkReply*)),this,SLOT(onFinished(QNetworkReply*)));

void onFinished(QNetworkReply* reply)
{

   if (reply->error() == QNetworkReply::NoError)
   {
       QByteArray bts = reply->readAll();

       QFile file("path/to/file");
       file.open(QIODevice::WriteOnly);
       file.write(bts);
       file.close();
   }
}
Другие вопросы по тегам