核心代码:
void MainWindow::httpResponse()
{
// 打印接收内容
QByteArray buffer = m_httpClient->readAll();
const QString startKey = "Content-Type: image/jpeg\r\nContent-Length: ";
const QString endKey = "\r\n--123456789000000000000987654321\r\n";
const QString splitKey = "\r\n\r\n";
int startPos = buffer.indexOf(startKey);
int endPos = buffer.indexOf(endKey);
if (startPos >= 0 && endPos >= 0) {
if (startPos < endPos) {
QByteArray lastFrame = buffer.mid(0, startPos);
frameBuffer.append(lastFrame);
// 显示
this->showPixmap(frameBuffer);
frameBuffer.clear();
int splitPos = buffer.indexOf(splitKey, startPos) + splitKey.size();
QByteArray currentFrame = buffer.mid(splitPos, endPos - splitPos);
frameBuffer.append(currentFrame);
// 显示
this->showPixmap(frameBuffer);
frameBuffer.clear();
QByteArray nextFrame = buffer.mid(endPos + endKey.size());
frameBuffer.append(nextFrame);
} else {
QByteArray lastFrame = buffer.mid(0, endPos);
frameBuffer.append(lastFrame);
// 显示
this->showPixmap(frameBuffer);
frameBuffer.clear();
int splitPos = buffer.indexOf(splitKey, startPos) + splitKey.size();
QByteArray nextFrame = buffer.mid(splitPos);
frameBuffer.append(nextFrame);
}
return;
}
if (startPos >= 0) {
QByteArray lastFrame = buffer.mid(0, startPos);
frameBuffer.append(lastFrame);
// 显示
this->showPixmap(frameBuffer);
frameBuffer.clear();
int splitPos = buffer.indexOf(splitKey, startPos);
QByteArray nextFrame = buffer.mid(splitPos + splitKey.size());
frameBuffer.append(nextFrame);
return;
}
if (endPos >= 0) {
QByteArray lastFrame = buffer.mid(0, endPos);
frameBuffer.append(lastFrame);
// 显示
this->showPixmap(frameBuffer);
frameBuffer.clear();
QByteArray nextFrame = buffer.mid(endPos + endKey.size());
frameBuffer.append(nextFrame);
return;
}
frameBuffer.append(buffer);
}