Выполнение HTTP POST-запроса в Qt с Meego 1.2 Harmattan - PullRequest
1 голос
/ 28 сентября 2011

Вот ситуация - я прикрепляю некоторый файл (изображение 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 (). Как это можно решить? Что вы можете посоветовать?

Заранее спасибо.

...