当前位置: 首页 > 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) {}
}

相关文章:

QT实现上传服务器功能

代码如下所示&#xff1a; void UploadZipFileToServer(const QString& strPath) {m_pFile new QFile(strPath);// 创建HTTP多部份请求QHttpMultiPart *multiPart new QHttpMultiPart(QHttpMultiPart::FormDataType);QHttpPart keyPart;keyPart.setHeader(QNetworkReques…...

元岳食堂采购供应链系统-智慧食堂数据化解决方案

随着社会的发展和科技的进步&#xff0c;在数字化浪潮的推动下&#xff0c;智慧食堂供应链系统逐渐成为食堂管理的重要工具。在此背景下&#xff0c;元岳食堂采购供应链系统应运而生&#xff0c;该系统通过其独特的数字化和自动化功能&#xff0c;能够对食堂的采购、储存、配送…...

基于Java+SpringBoot+Vue的影城管理系统

基于JavaSpringBootVue的影城管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 哈喽…...

自定义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 入门全攻略&#xff1a;安装、操作与常用命令指南 一、引言 二、Docker 下载与安装 2.1 Docker 的系统要求 2.2 安装步骤 ①对于 Windows 的安装指南 ②对于 macOS 的安装指南 ③对于 Linux 的安装指南 三、Docker 的基本概念 3.1 镜像&#xff08;Image…...

mstsc被卸载,远程桌面mstsc.exe重装

官网下载地址g卸载和重新安装远程桌面连接 | Microsoft Learn 卸载和重新安装远程桌面连接 | Microsoft Learn 下载地址 https://wwm.lanzouj.com/ioR4y26z7rle 下载后重新安装...

从根儿上学习spring 十一 之run方法启动第四段(5)

图15-AbstractAutowireCapableBeanFactory#doCreateBean方法 我们接着讲doCreateBean方法&#xff0c;之前对循环依赖做了些解释&#xff0c;我们接着往下看populateBean(beanName, mbd, instanceWrapper)方法 图15-572行 这行就是调用populateBean(beanName, mbd, instanceW…...

常见8种数据结构

常见的数据结构包括数组、链表、队列、栈、树、堆、哈希表和图&#xff0c;每种数据结构都有其特点&#xff0c;如下&#xff1a; 常见数据结构 1.数组2.链表3.队列4.栈5.树6.图7.哈希表8.堆 1.数组 特点&#xff1a; 固定大小的线性数据结构支持快速随机访问插入和删除效率…...

黑马Java零基础视频教程精华部分_11_面向对象进阶(3)_抽象类、接口、适配器

《黑马Java零基础视频教程精华部分》系列文章目录 黑马Java零基础视频教程精华部分_1_JDK、JRE、字面量、JAVA运算符 黑马Java零基础视频教程精华部分_2_顺序结构、分支结构、循环结构 黑马Java零基础视频教程精华部分_3_无限循环、跳转控制语句、数组、方法 黑马Java零基础视…...

Promethues Metrics

Metrics Metrics可分为三部分&#xff1a; HELP 描述metric作用TYPE metric类别 TYEP Counter 某个事件发生的次数数字只能增长 Total reuqests Total ExceptionsGauge 描述当前值可以上升或下降 CurrentCPU Utilization Available System Memory Number of concurren…...

公网IP与私网IP具体有哪些区别?

1.接入方式不同 公网IP以公网连接Internet上的非保留地址&#xff0c;私网IP则是局域网上的IP&#xff0c;通过NAT才能够与公网进行通信。 2.特点不同 公网IP由国际互联网络信息中心InterNIC负责,将IP地址分配给注册并向InterNIC提出申请的机构或组织。私网IP则是为节省可分配…...

LeetCode——3143. 正方形中的最多点数

通过万岁&#xff01;&#xff01;&#xff01; 题目&#xff1a;给你一个n*2的数组&#xff0c;然后第i行表示第i个点的坐标&#xff0c;然后还给你了一个字符串s&#xff0c;s[i]则表示第i个点的名称。然后让你找一个中心是&#xff08;0,0&#xff09;的正方形&#xff0c;…...

const重新赋值的问题

问: const haveNextPage false; // 默认没有下一页fetch(historyFullUrl).then(data > {haveNextPage data.data.has_more;这段代码有什么问题吗? 回答: 在你的代码中&#xff0c;有一个潜在的问题涉及到 haveNextPage 的赋值。你定义了 haveNextPage 作为一个常量&am…...

python开发上位机 - PyCharm环境搭建、安装PyQt5及工具

目录 简介&#xff1a; 一、安装PyCharm 1、下载 PyCharm 2、PyCharm安装 1&#xff09;配置安装目录 2&#xff09;安装选项 3、问题及解决方法 二、安装PyQt5 1、打开 Pycharm&#xff0c;新建 Project 2、安装 pyqt5 3、安装很慢怎么办&#xff1f; 4、安装 pyq…...

day02-安装虚拟机

1. 安装配置 前面一直下一步就OK 2. 虚拟机操作系统配置 语言 中文 软件安装&#xff1a; 最小安装&#xff0c;标准&#xff0c;调试工具&#xff0c;开发工具&#xff0c;系统工具&#xff0c;man手册 网络和主机名配置 主机名&#xff0c;自己起名字 网络配置 常规 &g…...

Qt:线程

一个Qt窗口生成后&#xff0c;为什么拖动窗口&#xff0c;窗口可以随着鼠标移动或放大缩小 因为对窗口操作后&#xff0c;都有对应的事件产生&#xff0c;Qt在其框架中对这些事件进行了默认处理 一个Qt程序默认只有一个线程&#xff0c;称为主线程&#xff08;也叫ui线程&#…...

VisionPro二次开发学习笔记11-使用 Caliper和Fixture定位Blob工具检测方块

该示例演示了如何使用卡尺工具和夹具工具来固定 Blob 工具。示例代码将检测图像上部区域中小方块的存在。当点击“运行”按钮时&#xff0c;将读取一张新图像。卡尺工具将被运行&#xff0c;卡尺工具的输出 Y 信息将传递给夹具工具。夹具工具使用来自卡尺工具的 Y 信息和新图像…...

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(五)卡尔曼滤波器一:认知卡尔曼滤波器;协方差矩阵与方差;

卡尔曼滤波器 为了研究卡尔曼&#xff0c;我阅读了大量博文。不敢说完全吃透&#xff0c;但是在做一件什么事&#xff0c;可以通过下面这文章来理解&#xff0c;我读了不下五遍。并整理标准重点&#xff0c;添加自己的一些见解。 自动驾驶传感器融合算法 - 自动驾驶汽车中的激…...

【Go】通过反射解析对象tag信息,实现简易ORM

反射是运行时&#xff0c;需要在运行时解析类型信息&#xff0c;编译期无法优化这些操作&#xff0c;因此比编译时已知类型信息的直接调用效率要低。 package mainimport ("fmt""reflect""strings" )type Person struct {Name string json:&quo…...

gemini2相机和宇树雷达L1的使用注意点

gemini2相机&#xff1a; 官方资料:Gemini2深度相机 (yahboom.com) 目前深度这一块智能提供某一点的深度数据&#xff0c;没有提供某一点的世界坐标&#xff0c;虽然网上有文章说是可以计算 已知深度图&#xff0c;获得某个像素点的三维坐标_深度图如何知道特征点的3d坐标-CS…...

Microsoft团队提出“弯曲雅各布天梯”新思路,了解量子数据如何教会AI做更好的化学

来源&#xff1a;ScienceAI 本文约3500字&#xff0c;建议阅读5分钟量子计算机生成精确数据&#xff0c;AI模型学习并实现百万倍加速预测。有时&#xff0c;一个视觉上引人注目的隐喻&#xff0c;足以让你传达一个复杂的观点。2001 年夏天&#xff0c;杜兰大学物理教授 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效果对比&#xff1a;与Qwen2-VL、LLaVA-1.6在飞书办公场景中的能力差异 如果你正在寻找一个能在飞书里“看懂”图片、表格、文档&#xff0c;还能跟你智能对话的办公助手&#xff0c;那么这篇文章就是为你准备的。 上篇文章我们详细讲解了如何在星图平台…...

yuzu模拟器完整配置指南:从零开始打造完美Switch游戏体验

yuzu模拟器完整配置指南&#xff1a;从零开始打造完美Switch游戏体验 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu是一款功能强大的开源任天堂Switch模拟器&#xff0c;让你在Windows、Linux和Android系统上…...

智能自动化OpenCore配置工具:OpCore-Simplify让黑苹果新手也能15分钟完成专业级EFI构建

智能自动化OpenCore配置工具&#xff1a;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实现纯净小说阅读&#xff1a;开源无广告解决方案 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 在信息过载的数字时代&#xff0c;每打开一个阅读应用都要面对弹窗…...

3步终极修复方案:拯救损坏的直播录制文件

3步终极修复方案&#xff1a;拯救损坏的直播录制文件 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 直播录制时最令人头疼的是什么&#xff1f;不是网络波动&#xff0c;不是主播下播…...

如何快速提升游戏效率:英雄联盟智能工具完整指南

如何快速提升游戏效率&#xff1a;英雄联盟智能工具完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟游戏中的繁琐操作和…...

LLM 算法岗 | 八股问答()· 多模态与主流模型架构

本文能帮你解决什么&#xff1f; 1. 搞懂FastAPI异步&#xff08;async/await&#xff09;到底在什么场景下能真正提升性能。 2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。 3. 避开常见的坑&#xff08;比如阻塞操作、数据库连接池耗尽、GIL限制&#xff09;。 …...

3大核心功能解析:飞秋Mac版如何实现高效局域网通信

3大核心功能解析&#xff1a;飞秋Mac版如何实现高效局域网通信 【免费下载链接】feiq 基于qt实现的mac版飞秋&#xff0c;遵循飞秋协议(飞鸽扩展协议)&#xff0c;支持多项飞秋特有功能 项目地址: https://gitcode.com/gh_mirrors/fe/feiq 还在为Mac与Windows设备间的通…...