捣鼓了几天 终于弄明白点怎么网络传输图片**
json语句 图片转为base64编码
直接贴代码不赘述
QString strUrl;
QString strerrorMessage;
QString strReply;
QString path = "E:\\PROject\\Qt\\new1008\\ProCocaCola\\savePic\\1.png";
QImage image = QImage(path);
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "PNG");
qDebug()<<"ba:"<<ba;
QString event = "helemt";
QByteArray value = ba.toBase64();
QString strpic = QString(value);
// 构建 JSON 对象 并发送 一次只有一个结果 jsonobject就可以
QJsonObject json;
json.insert("Event", event);
json.insert("Value", strpic);
qDebug()<<"jsonend:"<<json;
// 构建 JSON 文档
QJsonDocument document;
document.setObject(json);
QByteArray byteArray = document.toJson(QJsonDocument::Compact);
//qDebug()<<"byteArray"<<byteArray;
QString strJson(byteArray);
QString strRequest = strJson;
qDebug()<<"strRequest"<<strRequest;
strUrl = "https://localhost:44356/api/SQLite/POST_TestpicJson";
NetWorkHelper netHelper;
netHelper.POSTToApi(strUrl, strRequest,strerrorMessage,strReply);
qDebug()<<"strReply"<<strReply;
//解析json
QJsonParseError json_error;
QJsonDocument doucment_Parse = QJsonDocument::fromJson(strReply.toUtf8(), &json_error);
if (json_error.error == QJsonParseError::NoError)
{
if (doucment_Parse.isObject())
{
const QJsonObject obj = doucment_Parse.object();
qDebug() << obj;
if (obj.contains("Value"))
{
QString value = obj.value("Value").toString();
//直接解析json
QByteArray img64 = value.toUtf8();
//解析base64
QByteArray img = QByteArray::fromBase64(img64);
QPixmap pixmap;
pixmap.loadFromData(img);
ui->label->setPixmap(pixmap);
}
for(auto it=obj.begin();it!=obj.end();it++)
{
qDebug()<<it.key()<<":"<<it.value().toString();
}
}
}
void NetWorkHelper::POSTToApi(QString strUrl, QString requestStr, QString &errorMessage, QString &replyStr)
{
QNetworkRequest NetRequest;
NetRequest.setUrl(QUrl(strUrl));
//NetRequest.setRawHeader("Content-Type", "application/octet-stream");
NetRequest.setRawHeader("Content-Type", "application/json");
//oNetRequest.setRawHeader("Content-Type", "application/xml");
//oNetRequest.setRawHeader("Content-Type", "application/octet-stream");
//oNetRequest.setRawHeader("Authorization", "Bearer global-0b9ad652-9671-4cd8-86e9-e1b288dfe1da"); //token时用
NetRequest.setRawHeader("CLIENTVERSION", ("V1"));
//oNetReply = oNetAccessManager.put(oNetRequest, *request.getRequestData());
//oNetReply = oNetAccessManager.post(oNetRequest, *request.getRequestData());
//oNetReply = oNetAccessManager.get(oNetRequest);
//oNetReply = oNetAccessManager.deleteResource(oNetRequest);
// qDebug()<<"out:"<<oNetRequest.hasRawHeader("CLIENTVERSION");
// qDebug()<<"out2:"<<oNetRequest.header(QNetworkRequest::KnownHeaders::ContentTypeHeader);
QNetworkAccessManager NetAccessManager;
QNetworkReply* NetReply = NULL;
//https 添加以下
QSslConfiguration config;
QSslConfiguration conf = NetRequest.sslConfiguration();
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
conf.setProtocol(QSsl::TlsV1SslV3);
NetRequest.setSslConfiguration(conf);
NetReply = NetAccessManager.post(NetRequest, requestStr.toUtf8());
QEventLoop loop;
connect(NetReply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
//exec()之前语句会一直处于运行中,直到QEventLoop退出 实现控制程序运行进程 让replay接收完成再做处理
//qDebug()<<"out3:"<<NetReply->header(QNetworkRequest::KnownHeaders::ContentTypeHeader);
//记录httpCode
int httpsCode = NetReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug()<<"httpCode"<<httpsCode;
QNetworkReply::NetworkError e = NetReply->error();
replyStr = NetReply->readAll();
if (e)
{
errorMessage = NetReply->errorString();
qDebug()<<"errorMessage:"<<errorMessage;
}
}