Выполнение HTTP POST-запроса в Qt с Meego 1.2 Harmattan
Вот ситуация - я прикрепляю какой-то файл (изображение JPEG) к запросу HTTP POST, чтобы он отправлялся на локальный сервер через Wi-Fi, а сервер должен возвращать некоторый результат (простой текст).
Вот проблема, с которой я столкнулся, делая это в своем Qt-приложении для Nokia N9 (Meego 1.2 Harmattan).
После того, как запрос отправлен, продолжите работу на сервере и ответ будет отправлен обратно (я вижу журнал на сервере ), прежде чем данные с сервера дойдут до трубки, происходит огромная задержка (около 1 минуты). Если ответ возвращается в нескольких частях - задержка предшествует первой части, а другие становятся очень быстрыми (как и в случае с первой).
Тот же код, который я использую в том же приложении для Symbian^3 (Symbian Anna) на Nokia C6-01, и он работает просто отлично - все данные возвращаются через пару секунд (проверено в той же сети с тем же сервером и запросом), Также у меня есть несколько запросов GET, отправляемых из этого приложения на один и тот же сервер, и все они тоже отлично работает. Так что это может быть единственной проблемой Meego.
Отрывки:
void PostDownloader::sendPostJpgImage(QString url, QImage image) {
if(mainReply)
return;
char boundary[] = "AyV04a234DsHeKHcvNds";
image = image.convertToFormat(QImage::Format_RGB888);
QByteArray body;
QBuffer buffer(&body);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "JPG");
buffer.close();
QByteArray b;
b.append("--").append(boundary).append("\r\n");
b.append("Content-Disposition: form-data; name=\"jpgfile\"; filename=\"camera\"\r\n");
b.append("Content-Type: image/jpeg\r\n");
b.append("\r\n");
b.append(body);
b.append("\r\n");
b.append("--").append(boundary).append("--");
QNetworkRequest req = QNetworkRequest(QUrl(url));
req.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(QString("multipart/form-data; boundary=")+boundary));
req.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(b.size()));
req.setRawHeader("Connection", "Close");
req.setRawHeader("Cache-Control", "no-cache");
req.setRawHeader("Keep-Alive", "1");
mainReply = manager->post(req, b); //POST
connect(mainReply, SIGNAL(readyRead()), this, SLOT(dataReceived()));
connect(mainReply, SIGNAL(finished()), this, SLOT(finished()));
}
Таким образом, задержка перед вызовом слота dataReceived(). Как это можно решить? Что вы можете посоветовать?
Заранее спасибо.