情况如下 - 我将一些文件(JPEG 图像)附加到 HTTP POST 请求,因此它应该通过 Wi-Fi 发送到本地服务器,并且服务器应该返回一些结果(简单文本)。
这是我在诺基亚 N9(Meego 1.2 Harmattan)的 Qt 应用程序中遇到的问题。
发送请求后,服务器继续处理并发送回答案(我可以看到服务器上的日志)在服务器的数据到达手机之前有很大的延迟(大约 1 分钟)。如果答案在几个部分中返回 - 延迟在第一部分之前,而其他部分变得非常快(第一个部分也应该如此)。
我在诺基亚 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() 插槽之前。这怎么能解决?你有什么建议?
提前致谢。