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

qt QHttpMultiPart详解

1. 概述

QHttpMultiPart是Qt框架中用于处理HTTP多部分请求的类。它类似于RFC 2046中描述的MIME multipart消息,允许在单个HTTP请求中包含多个数据部分,如文件、文本等。这种多部分请求在上传文件或发送带有附件的邮件等场景中非常有用。QHttpMultiPart类提供了添加和管理QHttpPart对象的方法,其中QHttpPart表示HTTP请求中的一个部分,包含了部分的headers和数据。

2. 重要方法

QHttpMultiPart类的重要方法包括:

  • 构造函数:QHttpMultiPart(QHttpMultiPart::ContentType type) - 创建一个QHttpMultiPart对象,并指定其类型(如QHttpMultiPart::MixedType、QHttpMultiPart::RelatedType或QHttpMultiPart::FormDataType)。
  • append():void append(const QHttpPart &part) - 将一个QHttpPart对象添加到QHttpMultiPart中。
  • setBoundary():void setBoundary(const QByteArray &boundary) - 设置用于分隔各个部分的边界字符串。如果不设置,QHttpMultiPart将自动生成一个唯一的边界字符串。
  • boundary():QByteArray boundary() const - 返回当前设置的边界字符串。
  • contentType():QString contentType() const - 返回构造好的Content-Type头,包含了边界信息。

3、常用枚举类型

以下是 QHttpMultiPart 类中一些常用的枚举类型及其简要介绍:

QHttpMultiPart::ContentType:多部分内容类型

  • QHttpMultiPart::MixedType:混合内容类型
  • QHttpMultiPart::RelatedType:相关内容类型
  • QHttpMultiPart::FormDataType:表单数据内容类型
  • QHttpMultiPart::AlternativeType:备用内容类型
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QHttpMultiPart>
#include <QHttpPart>
#include <QFile>
#include <QUrl>
#include <QDebug>

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    QNetworkAccessManager manager;
    QUrl url("http://example.com/upload"); // 替换为实际的服务器URL
    QNetworkRequest request(url);

    QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);

    // 添加文本部分
    QHttpPart textPart;
    textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
    textPart.setBody("This is a text part.");
    multiPart->append(textPart);

    // 添加文件部分
    QHttpPart filePart;
    QFile *file = new QFile("example.txt"); // 替换为实际的文件路径
    file->open(QIODevice::ReadOnly);
    filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
    filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\"; filename=\"example.txt\""));
    filePart.setBodyDevice(file);
    file->setParent(multiPart); // 确保文件在multiPart被删除时也被删除
    multiPart->append(filePart);

    QNetworkReply *reply = manager.post(request, multiPart);
    multiPart->setParent(reply); // 确保multiPart在reply被删除时也被删除

    QObject::connect(reply, &QNetworkReply::finished, [&]() {
        if (reply->error() == QNetworkReply::NoError) {
            qDebug() << "Upload successful!";
        } else {
            qDebug() << "Upload failed:" << reply->errorString();
        }
        reply->deleteLater();
        QCoreApplication::quit();
    });

    return a.exec();
}

觉得有帮助的话,打赏一下呗。。

           


http://www.kler.cn/a/386647.html

相关文章:

  • 数据库范式、MySQL 架构、算法与树的深入解析
  • 从0学习React(11)
  • 高级java每日一道面试题-2024年11月06日-JVM篇-什么是 Class 文件? Class 文件主要的信息结构有哪些?
  • 硬件工程师之电子元器件—二极管(4)之热量对二极管温度特性的影响
  • ARM架构中断与异常向量表机制解析
  • Llama微调测试记录
  • 学习记录:js算法(八十八):分割回文串
  • 关于 el-table 的合计行问题
  • 接收nVisual中rabbitmq数据不成功问题排查
  • LeetCode30:串联所有单词的子串
  • ElasticSearch向量检索技术方案介绍
  • 设计模式之原型模式(上机考试多套试,每人题目和答案乱序排列场景)
  • YOLO11 旋转目标检测 | 数据标注 | 自定义数据集 | 模型训练 | 模型推理
  • 导师双选系统开发:Spring Boot技术详解
  • 在ubuntu2204上以 All-in-One 模式安装 KubeSphere
  • koa安装与使用
  • 【数据结构-合法括号字符串】力扣1963. 使字符串平衡的最小交换次数
  • shell中执行hive指令以及hive中执行shell和hdfs指令语法
  • 安卓逆向之socket抓包
  • 系统架构设计师论文:单元测试方法及其运用
  • 算法每日双题精讲——双指针(有效三角形的个数,和为s的俩个数)
  • Java-字符串常量池
  • WPF之iconfont(字体图标)使用
  • 【网络】完美配置 HTTPS:优化 SSL/TLS 证书以增强网站安全和性能
  • 山东布谷科技:关于直播源码|语音源码|一对一直播源码提交App Store的流程及重构建议
  • 证件照尺寸168宽240高,如何手机自拍更换蓝底