QHttpPart 类
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 |
详细描述
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", "[email protected]"); // 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。对于大量数据,应优先使用此方法,因为它在使用此方法时不会复制内容,而是直接从设备读取。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不同,则返回代码翻译no。
另请参阅 operator==。
QHttpPart &QHttpPart::operator=(const QHttpPart &other)
创建一个other的副本。
bool QHttpPart::operator==(const QHttpPart &other) const
如果此对象与other相同(即它们有相同的标题和主体),则返回代码翻译no。
另请参阅 operator!=。
© 2024 Qt公司。其中包含的文档贡献的版权属于各自的所有者。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可协议版本1.3的条款提供的。Qt和相应的标志是芬兰Qt公司及其全球子公司和分支机构的商标。所有其他商标均是各自所有者的财产。