Qt之QNetworkAccessManager 从本地和内存中上传数据到Http服务器

简述

        接连做了好几个服务器的项目,例如文件传输用的Ftp和对象存储服务器(Object Storage Service),简单的信息传输用的WebServer,之前也有用过HttpServer不过都和WebServer一样简单的调用接口提交数据并没有上传过文件,正好趁这次案例有机会做了个测试实例;

效果

从本地上传

        从本地中读取一个图片上传,图片的ContentTypeHeader头部信息要填写和图片格式一致的类型,例如:jpg对应"image/jpg",bmp对应"image/bmp",png对应"image/png";ContentDispositionHeader头部信息的name要对应"file";QFile需要动态创建,因为要上传的文件可能很大,如果是局部的话函数退出就会销毁内存,导致上传失误甚至程序奔溃;最后因为QFile是动态创建,所以需要给其设置一个父类QHttpMultiPart,当父类被删除时也删除QFile;

void MainWindow::on_pbFromLocal_clicked()
{obtainData();// 文件路径QFile *file = new QFile("C:/Users/ilson/Desktop/HttpFileUp/logo.jpg");if (!file->open(QFile::ReadOnly)) {statusBar()->showMessage("file open failed");return;}// 设置请求QHttpPart imagePart;imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpg"));imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\";filename=\"test.jpg\""));imagePart.setBodyDevice(file);QHttpPart codePart;codePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"productCode\""));codePart.setBody("code");QHttpPart addressPart;addressPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"macAddress\""));addressPart.setBody("A1:B2:C3:D4:E5:G6");//QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);multiPart->append(imagePart);multiPart->append(codePart);multiPart->append(addressPart);file->setParent(multiPart);  // 用 multiPart 删除 fileQNetworkReply *reply = m_http.post(QNetworkRequest(makeUrl()), multiPart);multiPart->setParent(reply); // 用 reply 删除 multiPartconnect(reply, SIGNAL(finished()), SLOT(replyFinished()));
}

从内存上传

        从内存上传和从本地的区别就是数据需要重新保存成QIODevice类型;

// 压缩图像
// image     要压缩的图像
QByteArray MainWindow::compim(const QImage &image)
{QBuffer buffer;buffer.open(QIODevice::WriteOnly);image.save(&buffer, "jpg", 90);buffer.close();return buffer.data();
}void MainWindow::on_pbFromMemory_clicked()
{obtainData();// 文件路径QImage image("C:/Users/ilson/Desktop/111.png");// 设置请求QHttpPart imagePart;imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/png"));imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\";filename=\"test.png\""));imagePart.setBody(compim(image));QHttpPart codePart;codePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"productCode\""));codePart.setBody("code");QHttpPart addressPart;addressPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"macAddress\""));addressPart.setBody("A1:B2:C3:D4:E5:G6");//QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);multiPart->append(imagePart);multiPart->append(codePart);multiPart->append(addressPart);QNetworkReply *reply = m_http.post(QNetworkRequest(makeUrl()), multiPart);multiPart->setParent(reply); // 用 reply 删除 multiPartconnect(reply, SIGNAL(finished()), SLOT(replyFinished()));
}

注意 

        QHttpMultiPart的删除需要给其设置父类QNetworkReply,当QNetworkReply被删除时其子类也自会删除;

其他

        源码下载(折扣):https://item.taobao.com/item.htm?ft=t&id=756129976580

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/227171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring 笔记十 Spring事务管理

文章目录 编程式事务控制相关对象PlatformTransactionManager TransactionDefinition事务隔离级别事务传播行为 TransactionStatus基于XML 的声明式事务控制什么是声明式事务控制 声明式事务控制的实现切点方法的事务参数的配置 基于注解的声明式事务控制使用注解配置声明式事务…

力扣LCR 130. 衣橱整理(DFS 解法)

Problem: LCR 130. 衣橱整理 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 首先该问题可以归纳为一类遍历二维矩阵的题目,此类中的一部分题目可以利用DFS来解决,具体到本题目: 我们可以利用一个布尔类型的二维数组记录我们已经访…

no module named ‘xxx‘

目录结构如下 我想在GCNmodel的model里引入layers的GraphConvolution:from GCNmodel.layers import GraphConvolution,但这样却报错no module named GCNmodel,而且用from layers import GraphConvolution也不行。然后用sys.path.appen(xxx)…

selenium-grid4.3.0两种模式记录

selenium-grid4.3.0两种模式记录 本文运行,需要提前配置好Java11以及安装好Chrom、Firefox、Safari其中一个浏览器,如果是Chrom、Firefox需要下载对应版本的驱动,并给 webdriver 配置环境变量,Safari浏览器Mac系统会自带&#xf…

使用下载代替物理串口输出-STM32 Debug (printf) Viewer

使用下载代替物理串口输出-STM32 Debug 硬件要求配置方法代码要求打印输出结果 硬件要求 STM32的PB9、PB10引脚的串口1通常用作其他功能使用后,无法通过printf()函数打印输出想要调试输出查看变量或调试信息。现已使用另外一种方法实现printf()函数打印输出。 ST…

百度搜索品牌形象优化怎么做?

搜索口碑现代网络营销不可或缺的一部分,特别是品牌搜索形象的优化是品牌方最为关注的重点之一。随着竞争的加剧,企业必须确保他们的产品或服务在搜索引擎结果中的排名尽可能地靠前,同时也必须保持自身品牌形象的丰满和调性。 企业如何做好品牌…

Mr. Cappuccino的第67杯咖啡——MacOS通过PD安装Win11

MacOS通过PD安装Win11 下载ParallelsDesktop安装ParallelsDesktop激活ParallelsDesktop下载Windows11安装Windows11激活Windows11 下载ParallelsDesktop ParallelsDesktop下载地址 安装ParallelsDesktop 关闭上面的窗口,继续操作 激活ParallelsDesktop 关闭上面的…

【LeetCode刷题】-- 161.相隔为1的编辑距离

161.相隔为1的编辑距离 方法:一次遍历 首先,我们要确认字符串的长度不会相差太远。如果长度差了2个或更多字符,那么 s 和 t 就不可能是一次编辑之差的字符串。 接下来,我们假设 s 的长度总是短于或等于 t 的长度。如果不是这样&…

SQL基础:SQL 介绍和数据库基础

SQL简介 常用的Java等语言是和计算机交流的工具,告诉计算机,让计算机做一些事。 和其类似,SQL是 Structured Query Language 的缩写,即结构化的查询语言,是和数据库交互的工具,即通过既定的一些格式&…

MySQL数据库存储

MySQL数据库存储 MySQL数据库简介MySQL开发环境MySQL安装图形化界面工具Navicat使用 表的操作表的概念3.2 创建表3.3 修改表 数据的操作-增删改查4.1 增加数据4.2 删除数据4.3 修改数据4.4 查询数据4.4.1 基础查询4.4.2 分组查询和聚合函数4.4.4 having语句4.4.5 排序4.5 多表联…

【MATLAB第82期】基于MATLAB的季节性差分自回归滑动平均模型SARIMA时间序列预测模型含预测未来

【MATLAB第82期】基于MATLAB的季节性差分自回归滑动平均模型SARIMA时间序列预测模型含预测未来 一、模型介绍 1、模型简介 季节性差分自回归移动平均模型(Seasonal Autoregressive Integrated Moving Average Model, SARIMA),又称为周期性…

uniapp的uni-im 即时通信使用教程【用户与商家对话、聊天 / 最新 / 最全 / 带源码 / 教程】

目录 使用场景用户图片商家图片 官方文档官方文档地址插件地址 项目创建uniCloud开发环境申请开发环境申请完后 概括开始使用步骤1App.vue 步骤2找到软件登录图片找到软件登录接口登录源码如下 步骤3找到软件注册图片注册源码如下 步骤4找到index.vue首页图片 index.vue源码如下…

佛山IBM System x3550 M4服务器维修检查

案例背景: 一家位于东莞的制造公司,在其佛山分厂中安装了一台IBM X3550 M4服务器作为其关键业务设备。该服务器负责管理和存储公司的生产数据、ERP系统和供应链数据。在生产过程中,该服务器突然发生了故障,导致佛山分厂的生产中断…

LT7911D是TYPE-C/DP或者EDP转2 PORT MIPI和LVDS加音频

1.概述: T7911D是一款高性能TYPE-C/DP/EDP转2 PORT MIPI或者LVDS的芯片,目前主要在AR/VR或者显示器上应用的很多,对于DP1.2输入,LT7911D可配置为1/2/4车道。自适应均衡化使其适用于长电缆应用,最大带宽可达21.6Gbps。…

编译android的C版本Lua库

本文讲述如何使用android studio 编译最新版本的Lua开源库),请自行下载。 我们提供的Demo,可以自行下载,工程结构如下: 本文编译的是Lua 5.4.6的版本,编译采用cmake的方式,我们支持编译静态库和动态库(我们在这一讲里:“Lua与***C在Android上的互调”是使用静态库)…

管理类联考——数学——真题篇——按知识分类——几何——解析几何

文章目录 解析几何2023真题(2023-07)-几何-解析几何-最值-画图求最值-两线相减求最大-联想三角形的“两边差小于第三边”,当为第三边为最大真题(2023-19)-几何-解析几何-最值-画图求最值-圆方程画出圆的形状-两点间距离…

实现两张图片的接缝线拼接

使用ORB算法检测特征点,并通过BFMatcher进行特征点匹配。然后,根据Lowes ratio test选择好的匹配点,并使用findHomography计算单应性矩阵。最后,使用warpPerspective将图像进行透视变换,然后将第二张图像粘贴到变换后的…

如何在PHP中使用WebSocket进行实时通信?

在PHP中使用WebSocket进行实时通信涉及到创建WebSocket服务器和与客户端建立WebSocket连接。以下是一般的步骤: 选择WebSocket库: 首先,您需要选择一个合适的PHP WebSocket库。一些流行的WebSocket库包括 Ratchet、ReactPHP、PHP-Websockets …

自动驾驶学习笔记(十九)——Planning模块

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo 社区开发者圆桌会》免费报名—>传送门 文章目录 前言 Planning作用 Planning内容 Plannin…

Python 爬虫之简单的爬虫(一)

爬取网页上所有链接 文章目录 爬取网页上所有链接前言一、基本内容二、代码编写1.引入库2.测试网页3.请求网页4.解析网页并保存 三、如何定义请求头?总结 前言 最近也学了点爬虫的东西。今天就先给大家写一个简单的爬虫吧。循序渐进,慢慢来哈哈哈哈哈哈…