С 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();
}
}
2

Другие решения


По вопросам рекламы [email protected]