本页内容

QHttpMultiPart Class

QHttpMultiPart 类类似于通过 HTTP 发送的 MIME 多部分消息。更多内容...

头文件: #include <QHttpMultiPart>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
继承自: QObject

公共类型

enum ContentType { MixedType, RelatedType, FormDataType, AlternativeType }

公共函数

QHttpMultiPart(QObject *parent = nullptr)
QHttpMultiPart(QHttpMultiPart::ContentType contentType, QObject *parent = nullptr)
virtual ~QHttpMultiPart()
void append(const QHttpPart &httpPart)
QByteArray boundary() const
void setBoundary(const QByteArray &boundary)
void setContentType(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.

另请参阅 QHttpPart 和QNetworkAccessManager::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()。

成员函数文档

[explicit] QHttpMultiPart::QHttpMultiPart(QObject *parent = nullptr)

创建一个内容类型为MixedType 的QHttpMultiPart,并将parent 设置为父对象。

另请参阅 QHttpMultiPart::ContentType 。

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

创建一个内容类型为contentType 的QHttpMultiPart对象,并将parent设置为父对象。

另请参阅 QHttpMultiPart::ContentType 。

[virtual 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 中未包含的多部分子类型,可以手动在QNetworkRequest 中添加“Content-Type”头字段,然后将此请求与多部分消息一起用于发布操作。

另请参阅 QHttpMultiPart::ContentType 和QNetworkAccessManager::post()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.