QHttpMultiPart 类

QHttpMultiPart 类类似于要发送到 HTTP 的 MIME 多部分消息。 更多...

#include <QHttpMultiPart>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network
继承 QObject

公共类型

枚举ContentType { MixedType, RelatedType, FormDataType, AlternativeType }

公共函数

QHttpMultiPart(QObject *parent = nullptr)
QHttpMultiPart(QHttpMultiPart::ContentType contentType, QObject *parent = nullptr)
virtual~QHttpMultiPart()
voidappend(const QHttpPart &httpPart)
QByteArrayboundary() const
voidsetBoundary(const QByteArray &boundary)
voidsetContentType(QHttpMultiPart::ContentType contentType)

详细描述

QHttpMultiPart 类类似于在 RFC 2046 中描述的 MIME 多部分消息,计划通过 HTTP 发送。一个多部分消息包含任意数量的正文部分(见 QHttpPart),这些部分通过一个唯一的边界分隔。QHttpMultiPart 的边界由字符串 "boundary_.oOo._" 后跟随机字符构成,确保其自身内部不会发生。如果需要,仍然可以通过 setBoundary() 来设置边界。

例如,以下代码片段构建了一个包含文本部分和图像部分的多部分消息:

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

QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
textPart.setBody("my text");

QHttpPart imagePart;
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"image\""));
QFile *file = new QFile("image.jpg");
file->open(QIODevice::ReadOnly);
imagePart.setBodyDevice(file);
file->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart

multiPart->append(textPart);
multiPart->append(imagePart);

QUrl url("http://my.server.tld");
QNetworkRequest request(url);

QNetworkAccessManager manager;
QNetworkReply *reply = manager.post(request, multiPart);
multiPart->setParent(reply); // delete the multiPart with the reply
// here connect signals etc.

另请参阅 QHttpPartQNetworkAccessManager::post().

成员类型文档

enum QHttpMultiPart::ContentType

在 RFC 2046 中描述的已知多部分内容类型列表和其他描述。

常量描述
QHttpMultiPart::MixedType0对应于 "multipart/mixed" 子类型,表示正文部分相互独立,如 RFC 2046 中所述。
QHttpMultiPart::RelatedType1对应于 "multipart/related" 子类型,表示正文部分相互关联,如 RFC 2387 中所述。
QHttpMultiPart::FormDataType2对应于 "multipart/form-data" 子类型,表示正文部分包含表单元素,如 RFC 2388 中所述。
QHttpMultiPart::AlternativeType3对应于 "multipart/alternative" 子类型,意味着正文部分是对相同信息的不同表示,如RFC 2046中所述。

另请参阅 setContentType().

成员函数文档

[显式] QHttpMultiPart::QHttpMultiPart(QObject *parent = nullptr)

构建类型为 MixedType 的 QHttpMultiPart 并将 parent 设置为父对象。

另请参阅 QHttpMultiPart::ContentType.

[显式] QHttpMultiPart::QHttpMultiPart(QHttpMultiPart::ContentType contentType, QObject *parent = nullptr)

构建类型为 contentType 的 QHttpMultiPart 并将父对象设置为 parent

另请参阅 QHttpMultiPart::ContentType.

[虚拟 noexcept] QHttpMultiPart::~QHttpMultiPart()

销毁多部分。

void QHttpMultiPart::append(const QHttpPart &httpPart)

httpPart 添加到此多部分。

QByteArray QHttpMultiPart::boundary() const

返回边界。

另请参阅 setBoundary().

void QHttpMultiPart::setBoundary(const QByteArray &boundary)

设置边界为 boundary

通常,您不需要自己生成边界;构造时,边界以字符串 "boundary_.oOo._" 开始,后跟随机字符,并提供足够的唯一性,以确保它不会出现在部分内部。

另请参阅 boundary().

void QHttpMultiPart::setContentType(QHttpMultiPart::ContentType contentType)

设置内容类型为 contentType。当通过 QNetworkAccessManager::post() 发送多部分消息时将在HTTP头部部分使用内容类型。如果您想使用不属于 QHttpMultiPart::ContentType 的多部分子类型,您可以手动将 "Content-Type" 标头字段添加到 QNetworkRequest,然后使用此请求与多部分消息一起发布。

另请参阅 QHttpMultiPart::ContentTypeQNetworkAccessManager::post().

© 2024 Qt公司有限公司。本文档中的文档贡献是各自所有者的版权。本提供的文档是根据自由软件基金会发布的 GNU自由文档许可证版本1.3 下的条款许可的。Qt及其标志是芬兰的Qt公司有限公司及其它国家/地区的商标。所有其他商标归其各自所有者所有。