QHttpPart Class
QHttpPart 类用于保存 HTTP 多部分 MIME 消息中的主体部分。更多
Header: | #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!=()。
© 2025 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.