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