QHttpPart Class
QHttpPart 类用于保存将在 HTTP 多部分 MIME 消息中使用的正文部分。更多内容...
| 头文件: | #include <QHttpPart> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
- 所有成员的列表,包括继承的成员
- QHttpPart 属于网络编程 API 和隐式共享类。
公共函数
| QHttpPart() | |
| QHttpPart(const QHttpPart &other) | |
| ~QHttpPart() | |
| void | setBody(const QByteArray &body) |
| void | setBodyDevice(QIODevice *device) |
| void | setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value) |
| void | setRawHeader(const QByteArray &headerName, const QByteArray &headerValue) |
| void | swap(QHttpPart &other) |
| bool | operator!=(const QHttpPart &other) const |
| QHttpPart & | operator=(const QHttpPart &other) |
| bool | operator==(const QHttpPart &other) const |
相关的非成员
(since 6.8) QDebug | operator<<(QDebug debug, const QHttpPart &part) |
详细说明
QHttpPart 类保存一个用于 HTTP 多部分 MIME 消息(由QHttpMultiPart 类表示)中的正文部分。一个 QHttpPart 由一个头部块和一个数据块组成,两者之间由两个连续的换行符分隔。一个部分的示例如下:
Content-Type: text/plain
Content-Disposition: form-data; name="text"
here goes the body要设置头信息,请使用setHeader() 和setRawHeader(),它们的行为与QNetworkRequest::setHeader() 和QNetworkRequest::setRawHeader() 完全一致。
若需读取小块数据,请使用setBody();若需读取较大数据块(例如图像),请使用setBodyDevice()。 后一种方法通过不进行内部数据复制,而是直接从设备读取数据来节省内存。这意味着,当包含正文部分的多部分消息通过QNetworkAccessManager::post() 在网络上发送时,该设备必须已打开且处于可读状态。
要构建一个正文较小的 QHttpPart,请参考以下代码片段(这将生成上文示例中显示的数据):
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
textPart.setBody("here goes the body");若要构建一个从设备(例如文件)读取数据的 QHttpPart,可采用以下方法:
QHttpPart imagePart;
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"image\""));
imagePart.setRawHeader("Content-ID", "my@content.id"); // add any headers you like via setRawHeader()
QFile *file = new QFile("image.jpg");
file->open(QIODevice::ReadOnly);
imagePart.setBodyDevice(file);请注意,设置 QHttpPart 时不会使其拥有该设备,因此当不再需要该设备时,开发者有责任将其销毁。一个不错的做法是将多部分消息设置为设备的父对象,具体请参阅QHttpMultiPart 的文档。
另请参阅 QHttpMultiPart 和QNetworkAccessManager 。
成员函数文档
QHttpPart::QHttpPart()
创建一个空的 QHttpPart 对象。
QHttpPart::QHttpPart(const QHttpPart &other)
创建other 的副本。
[noexcept] QHttpPart::~QHttpPart()
删除此链接:QHttpPart 。
void QHttpPart::setBody(const QByteArray &body)
将此 MIME 部分的正文设置为body 。除非通过setBodyDevice() 设置了设备,否则将使用此方法设置的正文。对于大量数据(例如图像),请使用setBodyDevice(),该方法不会在内部复制数据。
另请参阅 setBodyDevice()。
void QHttpPart::setBodyDevice(QIODevice *device)
将设备设置为从device 读取内容。对于大量数据,应优先使用此方法而非setBody(),因为使用此方法时不会复制内容,而是直接从设备读取。device 必须已打开且可读。QHttpPart 不会接管device 的所有权,即如有必要,必须自行关闭并销毁该设备。 如果device 是顺序设备(例如套接字,但不包括文件),则应在device 发出finished()信号后调用QNetworkAccessManager::post()。若要解除设备绑定并使用通过setBody()设置的数据,请使用“setBodyDevice(0)”。
另请参阅 setBody() 和QNetworkAccessManager::post()。
void QHttpPart::setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)
将已知标头header 的值设置为value ,并覆盖之前设置的任何标头。
另请参阅 QNetworkRequest::KnownHeaders 、setRawHeader() 以及QNetworkRequest::setHeader()。
void QHttpPart::setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
将标头headerName 的值设置为headerValue 。如果headerName 对应于已知的标头(参见QNetworkRequest::KnownHeaders ),系统将解析原始格式,并同时设置相应的“处理后”标头。
注意: 两次设置 相同的标头会覆盖之前的设置。若要实现多个同名 HTTP 标头的行为,应将两个值用逗号 (",") 分隔后拼接,并设置一个单一的原始标头。
另请参阅 QNetworkRequest::KnownHeaders 、setHeader() 以及QNetworkRequest::setRawHeader()。
[noexcept] void QHttpPart::swap(QHttpPart &other)
将此 HTTP 部分替换为other 。此操作速度极快,且绝不会失败。
bool QHttpPart::operator!=(const QHttpPart &other) const
如果该对象与other 不相同,则返回true 。
另请参阅 operator==()。
QHttpPart &QHttpPart::operator=(const QHttpPart &other)
创建other 的副本。
bool QHttpPart::operator==(const QHttpPart &other) const
如果该对象与other 相同(即它们的头部和正文内容完全一致),则返回true 。
另请参阅 operator!=()。
© 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.