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) {}
}
相关文章:
QT实现上传服务器功能
代码如下所示: void UploadZipFileToServer(const QString& strPath) {m_pFile new QFile(strPath);// 创建HTTP多部份请求QHttpMultiPart *multiPart new QHttpMultiPart(QHttpMultiPart::FormDataType);QHttpPart keyPart;keyPart.setHeader(QNetworkReques…...
元岳食堂采购供应链系统-智慧食堂数据化解决方案
随着社会的发展和科技的进步,在数字化浪潮的推动下,智慧食堂供应链系统逐渐成为食堂管理的重要工具。在此背景下,元岳食堂采购供应链系统应运而生,该系统通过其独特的数字化和自动化功能,能够对食堂的采购、储存、配送…...
基于Java+SpringBoot+Vue的影城管理系统
基于JavaSpringBootVue的影城管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 哈喽…...
自定义starter
依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 ht…...
Docker 入门全攻略:安装、操作与常用命令指南
目录 Docker 入门全攻略:安装、操作与常用命令指南 一、引言 二、Docker 下载与安装 2.1 Docker 的系统要求 2.2 安装步骤 ①对于 Windows 的安装指南 ②对于 macOS 的安装指南 ③对于 Linux 的安装指南 三、Docker 的基本概念 3.1 镜像(Image…...
mstsc被卸载,远程桌面mstsc.exe重装
官网下载地址g卸载和重新安装远程桌面连接 | Microsoft Learn 卸载和重新安装远程桌面连接 | Microsoft Learn 下载地址 https://wwm.lanzouj.com/ioR4y26z7rle 下载后重新安装...
从根儿上学习spring 十一 之run方法启动第四段(5)
图15-AbstractAutowireCapableBeanFactory#doCreateBean方法 我们接着讲doCreateBean方法,之前对循环依赖做了些解释,我们接着往下看populateBean(beanName, mbd, instanceWrapper)方法 图15-572行 这行就是调用populateBean(beanName, mbd, instanceW…...
常见8种数据结构
常见的数据结构包括数组、链表、队列、栈、树、堆、哈希表和图,每种数据结构都有其特点,如下: 常见数据结构 1.数组2.链表3.队列4.栈5.树6.图7.哈希表8.堆 1.数组 特点: 固定大小的线性数据结构支持快速随机访问插入和删除效率…...
黑马Java零基础视频教程精华部分_11_面向对象进阶(3)_抽象类、接口、适配器
《黑马Java零基础视频教程精华部分》系列文章目录 黑马Java零基础视频教程精华部分_1_JDK、JRE、字面量、JAVA运算符 黑马Java零基础视频教程精华部分_2_顺序结构、分支结构、循环结构 黑马Java零基础视频教程精华部分_3_无限循环、跳转控制语句、数组、方法 黑马Java零基础视…...
Promethues Metrics
Metrics Metrics可分为三部分: HELP 描述metric作用TYPE metric类别 TYEP Counter 某个事件发生的次数数字只能增长 Total reuqests Total ExceptionsGauge 描述当前值可以上升或下降 CurrentCPU Utilization Available System Memory Number of concurren…...
公网IP与私网IP具体有哪些区别?
1.接入方式不同 公网IP以公网连接Internet上的非保留地址,私网IP则是局域网上的IP,通过NAT才能够与公网进行通信。 2.特点不同 公网IP由国际互联网络信息中心InterNIC负责,将IP地址分配给注册并向InterNIC提出申请的机构或组织。私网IP则是为节省可分配…...
LeetCode——3143. 正方形中的最多点数
通过万岁!!! 题目:给你一个n*2的数组,然后第i行表示第i个点的坐标,然后还给你了一个字符串s,s[i]则表示第i个点的名称。然后让你找一个中心是(0,0)的正方形,…...
const重新赋值的问题
问: const haveNextPage false; // 默认没有下一页fetch(historyFullUrl).then(data > {haveNextPage data.data.has_more;这段代码有什么问题吗? 回答: 在你的代码中,有一个潜在的问题涉及到 haveNextPage 的赋值。你定义了 haveNextPage 作为一个常量&am…...
python开发上位机 - PyCharm环境搭建、安装PyQt5及工具
目录 简介: 一、安装PyCharm 1、下载 PyCharm 2、PyCharm安装 1)配置安装目录 2)安装选项 3、问题及解决方法 二、安装PyQt5 1、打开 Pycharm,新建 Project 2、安装 pyqt5 3、安装很慢怎么办? 4、安装 pyq…...
day02-安装虚拟机
1. 安装配置 前面一直下一步就OK 2. 虚拟机操作系统配置 语言 中文 软件安装: 最小安装,标准,调试工具,开发工具,系统工具,man手册 网络和主机名配置 主机名,自己起名字 网络配置 常规 &g…...
Qt:线程
一个Qt窗口生成后,为什么拖动窗口,窗口可以随着鼠标移动或放大缩小 因为对窗口操作后,都有对应的事件产生,Qt在其框架中对这些事件进行了默认处理 一个Qt程序默认只有一个线程,称为主线程(也叫ui线程&#…...
VisionPro二次开发学习笔记11-使用 Caliper和Fixture定位Blob工具检测方块
该示例演示了如何使用卡尺工具和夹具工具来固定 Blob 工具。示例代码将检测图像上部区域中小方块的存在。当点击“运行”按钮时,将读取一张新图像。卡尺工具将被运行,卡尺工具的输出 Y 信息将传递给夹具工具。夹具工具使用来自卡尺工具的 Y 信息和新图像…...
高翔【自动驾驶与机器人中的SLAM技术】学习笔记(五)卡尔曼滤波器一:认知卡尔曼滤波器;协方差矩阵与方差;
卡尔曼滤波器 为了研究卡尔曼,我阅读了大量博文。不敢说完全吃透,但是在做一件什么事,可以通过下面这文章来理解,我读了不下五遍。并整理标准重点,添加自己的一些见解。 自动驾驶传感器融合算法 - 自动驾驶汽车中的激…...
【Go】通过反射解析对象tag信息,实现简易ORM
反射是运行时,需要在运行时解析类型信息,编译期无法优化这些操作,因此比编译时已知类型信息的直接调用效率要低。 package mainimport ("fmt""reflect""strings" )type Person struct {Name string json:&quo…...
gemini2相机和宇树雷达L1的使用注意点
gemini2相机: 官方资料:Gemini2深度相机 (yahboom.com) 目前深度这一块智能提供某一点的深度数据,没有提供某一点的世界坐标,虽然网上有文章说是可以计算 已知深度图,获得某个像素点的三维坐标_深度图如何知道特征点的3d坐标-CS…...
Microsoft团队提出“弯曲雅各布天梯”新思路,了解量子数据如何教会AI做更好的化学
来源:ScienceAI 本文约3500字,建议阅读5分钟量子计算机生成精确数据,AI模型学习并实现百万倍加速预测。有时,一个视觉上引人注目的隐喻,足以让你传达一个复杂的观点。2001 年夏天,杜兰大学物理教授 John P.…...
基于逻辑回归与XGBoost的冠心病风险预测模型比较研究——以UCI Heart Disease数据集为例
基于逻辑回归与XGBoost的冠心病风险预测模型比较研究——以UCI Heart Disease数据集为例 摘要 冠心病是当前全球范围内致死率最高的心血管疾病之一,早期准确识别高危人群对于降低发病率和死亡率具有重要意义。本研究以UCI Heart Disease数据集为基础,系统比较了逻辑回归与X…...
星图平台Qwen3-VL:30B效果对比:与Qwen2-VL、LLaVA-1.6在飞书办公场景中的能力差异
星图平台Qwen3-VL:30B效果对比:与Qwen2-VL、LLaVA-1.6在飞书办公场景中的能力差异 如果你正在寻找一个能在飞书里“看懂”图片、表格、文档,还能跟你智能对话的办公助手,那么这篇文章就是为你准备的。 上篇文章我们详细讲解了如何在星图平台…...
yuzu模拟器完整配置指南:从零开始打造完美Switch游戏体验
yuzu模拟器完整配置指南:从零开始打造完美Switch游戏体验 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu是一款功能强大的开源任天堂Switch模拟器,让你在Windows、Linux和Android系统上…...
智能自动化OpenCore配置工具:OpCore-Simplify让黑苹果新手也能15分钟完成专业级EFI构建
智能自动化OpenCore配置工具:OpCore-Simplify让黑苹果新手也能15分钟完成专业级EFI构建 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 当…...
如何通过ReadCat实现纯净小说阅读:开源无广告解决方案
如何通过ReadCat实现纯净小说阅读:开源无广告解决方案 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 在信息过载的数字时代,每打开一个阅读应用都要面对弹窗…...
3步终极修复方案:拯救损坏的直播录制文件
3步终极修复方案:拯救损坏的直播录制文件 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 直播录制时最令人头疼的是什么?不是网络波动,不是主播下播…...
如何快速提升游戏效率:英雄联盟智能工具完整指南
如何快速提升游戏效率:英雄联盟智能工具完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟游戏中的繁琐操作和…...
LLM 算法岗 | 八股问答()· 多模态与主流模型架构
本文能帮你解决什么? 1. 搞懂FastAPI异步(async/await)到底在什么场景下能真正提升性能。 2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。 3. 避开常见的坑(比如阻塞操作、数据库连接池耗尽、GIL限制)。 …...
3大核心功能解析:飞秋Mac版如何实现高效局域网通信
3大核心功能解析:飞秋Mac版如何实现高效局域网通信 【免费下载链接】feiq 基于qt实现的mac版飞秋,遵循飞秋协议(飞鸽扩展协议),支持多项飞秋特有功能 项目地址: https://gitcode.com/gh_mirrors/fe/feiq 还在为Mac与Windows设备间的通…...
