QHttpPart 类

QHttpPart 类用于存储 HTTP 多部分 MIME 消息中要使用的正文部分。 更多...

#include <QHttpPart>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network

公共函数

QHttpPart()
QHttpPart(const QHttpPart &other)
~QHttpPart()
voidsetBody(const QByteArray &body)
voidsetBodyDevice(QIODevice *device)
voidsetHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)
voidsetRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
voidswap(QHttpPart &other)
booloperator!=(const QHttpPart &other) const
QHttpPart &operator=(const QHttpPart &other)
booloperator==(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)”。

另请参阅setBodyQNetworkAccessManager::post

void QHttpPart::setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)

将已知头header的值设置为value,覆盖之前设置的任何头。

另请参阅QNetworkRequest::KnownHeaderssetRawHeaderQNetworkRequest::setHeader

void QHttpPart::setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)

将头headerName的值设置为headerValue。如果headerName对应一个已知头(请参阅QNetworkRequest::KnownHeaders),则将解析原始格式并将相应的“烹饪”头也设置为。

注意:设置相同的标题两次将覆盖前一次设置。为了实现具有相同名称的多个HTTP标题的行为,您应将两个值连接起来,用逗号 (",") 分隔,并设置单个原始标题。

另请参阅 QNetworkRequest::KnownHeaderssetHeader() 和 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公司及其全球子公司和分支机构的商标。所有其他商标均是各自所有者的财产。