[Qt] network post图片到web api

本文介绍了如何使用Qt库将图片转换为Base64编码,并通过HTTP POST请求在网络中传输。代码示例展示了从本地文件读取图片,将其保存为Base64字符串,构建JSON对象,发送请求以及接收和解析响应的过程。涉及到的技术包括QImage、QByteArray、QBuffer、QJsonDocument等。同时,文章还展示了如何处理网络请求的错误和响应。
摘要由CSDN通过智能技术生成

捣鼓了几天 终于弄明白点怎么网络传输图片**

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;
    }
}


学会别的方式再更新

更新表单传输文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值