状況は次のとおりです-ファイル(JPEG画像)をHTTP POSTリクエストに添付して、Wi-Fi経由でローカルサーバーに送信し、サーバーが結果(単純なテキスト)を返すようにします。
Nokia N9 (Meego 1.2 Harmattan) の Qt アプリケーションでこれを行う際に直面した問題を次に示します。
リクエストが送信された後、サーバーによって処理が続行され、応答が返されます (サーバーでログを確認できます) 。サーバーからのデータがハンドセットに到達するまでに、大きな遅延 (約 1 分) があります。回答がいくつかの部分で返される場合 - 遅延は最初の部分の前にあり、他の部分は非常に速くなっています (最初の部分でもそうあるべきです)。
Nokia C6-01 の Symbian^3 (Symbian Anna) の同じアプリで使用している同じコードで、問題なく動作します。すべてのデータが数秒で返されます (同じサーバーと要求を使用して同じネットワークでテストされています)。. また、このアプリから同じサーバーに送信する 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() スロットを呼び出す前です。これはどのように解決できますか?何をアドバイスできますか?
前もって感謝します。