当前位置: 首页 > news >正文

QT实现上传服务器功能

代码如下所示:


void UploadZipFileToServer(const QString& strPath)
{m_pFile = new QFile(strPath);// 创建HTTP多部份请求QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);QHttpPart keyPart;keyPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"").arg("id")));keyPart.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain;charset=UTF-8");keyPart.setBody(m_strModelID.toUtf8());multiPart->append(keyPart);QString strMdlName = QFileInfo(strPath).fileName();QHttpPart modelNamePart;modelNamePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"").arg("name")));modelNamePart.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain;charset=UTF-8");modelNamePart.setBody(strMdlName.toUtf8());multiPart->append(modelNamePart);QHttpPart filePart;filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"; filename=\"%2\"").arg("file").arg(m_pFile->fileName())));filePart.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain;charset=UTF-8");m_pFile->open(QIODevice::ReadOnly);filePart.setBodyDevice(m_pFile);m_pFile->setParent(multiPart);multiPart->append(filePart);QHttpPart tokenPart;tokenPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"").arg("level")));tokenPart.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain;charset=UTF-8");tokenPart.setBody(m_strClassification.toUtf8());multiPart->append(tokenPart);QHttpPart authorizationPart;authorizationPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"").arg("model")));authorizationPart.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain;charset=UTF-8");authorizationPart.setBody(m_strType.toUtf8());multiPart->append(authorizationPart);QHttpPart metafiled;metafiled.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"%1\"").arg("zone")));metafiled.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain;charset=UTF-8");metafiled.setBody(m_strCooperationZone.toUtf8());multiPart->append(metafiled);//QUrl url("http://192.168.2.59:9090/fileservice/fileupload.do");QUrl url(m_strIp);// 请求URLQNetworkRequest request(url);QNetworkAccessManager *manager = new QNetworkAccessManager();m_pReply = manager->post(request, multiPart);multiPart->setParent(m_pReply);connect(m_pReply, SIGNAL(finished()), this, SLOT(httpUploadFinished()));connect(m_pReply, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(uploadProgress(qint64, qint64)));QEventLoop eventLoop;connect(manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));eventLoop.exec();
}void httpUploadFinished()
{// 测试代码//QString jsonString = u8R"({  //"code":"1001",//"Data": "打完为Joi",  //"Message": "测试测试",  //"Title": "返回报错信息"//})";//QByteArray byteResonse = jsonString.toUtf8();// 服务器采用UTF-8编码返回数据QByteArray byteResonse = m_pReply->readAll();// 将服务器返回的数据写入Log文件便于观察QString responseString = QString::fromUtf8(byteResonse);{QFile file("ServerResLog.txt");if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {return;}QTextStream out(&file);out.setCodec("UTF-8");out << responseString;file.close();}// 处理服务器返回的数据QJsonParseError error;QJsonDocument jsonDoc = QJsonDocument::fromJson(byteResonse, &error);if (!jsonDoc.isNull()) {QJsonObject jsonObj = jsonDoc.object();QString strCode = jsonObj["code"].toString(); // 获取 code 字段的值if ("1000" == strCode){QMessageBox::information(nullptr, QStringLiteral("上传成功"), QStringLiteral("上传成功!"));return;}else if ("1001" == strCode){QString dataValue = jsonObj["Data"].toString(); // 获取 Data 字段的值QString message = jsonObj["Message"].toString().toUtf8(); // 获取 Message 字段的值QString title = jsonObj["Title"].toString().toUtf8(); // 获取 Title 字段的值QMap<QString, QString> mapTemp;mapTemp.insert("code", strCode);mapTemp.insert("Data", dataValue);mapTemp.insert("Message", message);mapTemp.insert("Title", title);ReplyMessageShow dlg(mapTemp);if (dlg.exec() == QDialog::Accepted) {}}else{QMessageBox::information(nullptr, QStringLiteral("提示"), QStringLiteral("解析返回json数据失败!"));return;}}else{QMessageBox::information(nullptr, QStringLiteral("提示"), QStringLiteral("未连接到正确服务器或服务器返回json数据为空!"));return;}// 测试JSON解析代码//QString jsonString = u8R"({  //"code":1001,//"Data": null,  //"Message": "Error!",  //"Title": "返回报错信息"//})";//QByteArray byteResonse = jsonString.toUtf8();//QString strTemp = QString::fromUtf8(byteResonse);//QJsonParseError error;//QJsonDocument jsonDoc = QJsonDocument::fromJson(utf8Data, &error);获取 JSON 对象//QJsonObject jsonObj = jsonDoc.object();从 JSON 对象中提取数据//int code = jsonObj["code"].toInt();//QString data = jsonObj["Data"].toString();//QString message = jsonObj["Message"].toString().toUtf8();//QString title = jsonObj["Title"].toString().toUtf8();//QMap<QString, QString> mapTemp;//mapTemp.insert("code", QString::number(code));//mapTemp.insert("Data", data);//mapTemp.insert("Message", message);//mapTemp.insert("Title", title);//ReplyMessageShow dlg(mapTemp);//if (dlg.exec() == QDialog::Accepted) {}
}

http://www.lryc.cn/news/419104.html

相关文章:

  • 元岳食堂采购供应链系统-智慧食堂数据化解决方案
  • 基于Java+SpringBoot+Vue的影城管理系统
  • 自定义starter
  • Docker 入门全攻略:安装、操作与常用命令指南
  • mstsc被卸载,远程桌面mstsc.exe重装
  • 从根儿上学习spring 十一 之run方法启动第四段(5)
  • 常见8种数据结构
  • 黑马Java零基础视频教程精华部分_11_面向对象进阶(3)_抽象类、接口、适配器
  • Promethues Metrics
  • 公网IP与私网IP具体有哪些区别?
  • LeetCode——3143. 正方形中的最多点数
  • const重新赋值的问题
  • python开发上位机 - PyCharm环境搭建、安装PyQt5及工具
  • day02-安装虚拟机
  • Qt:线程
  • VisionPro二次开发学习笔记11-使用 Caliper和Fixture定位Blob工具检测方块
  • 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(五)卡尔曼滤波器一:认知卡尔曼滤波器;协方差矩阵与方差;
  • 【Go】通过反射解析对象tag信息,实现简易ORM
  • gemini2相机和宇树雷达L1的使用注意点
  • FPGA开发——verilog随机涵数$random的使用方法
  • Android14 WPA2和WPA3 类型的WiFi网络连接
  • 24/8/5算法笔记 逻辑回归sigmoid
  • 适用于验证码的OCR,识别快速,使用简单!
  • 超简单适合练手的双指针题:判断子序列
  • 打破老美垄断,潘展乐商业价值起飞
  • java面试题:简化URL
  • 用 echarts 开发地图、点击展示自定义信息框
  • Android 应用兼容性变更调试
  • 76 多态
  • 数据采集工具之Canal