Я могу опубликовать файл в Qt используя QNetworkReply
, QNetworkAccessManager
, QNetworkRequest
и т. д. на сервер. Этот сервер преобразует файл и выплевывает его обратно. Как я могу получить этот скрытый файл? Нужно ли мне как-то найти URL файла, возвращаемого из заголовков, а затем QNetworkAccessManager
сделать запрос на получение? Или я могу как-то получить его из существующихQNetworkReply
сигналы и записать его в файл?
Если сервер возвращает файл в ответ на запрос, вы можете прочитать файл непосредственно из возвращенного ответа:
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();
}
}