QFormDataBuilder Class

QFormDataBuilder 类是一个方便类,用于简化QHttpMultiPart 对象的构造。更多

Header: #include <QFormDataBuilder>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Qt 6.8

公共类型

enum class Option { Default, OmitRfc8187EncodedFilename, UseRfc7578PercentEncodedFilename, PreferLatin1EncodedFilename, StrictRfc7578 }
flags Options

公共函数

QFormDataBuilder()
QFormDataBuilder(QFormDataBuilder &&other)
~QFormDataBuilder()
std::unique_ptr<QHttpMultiPart> buildMultiPart(QFormDataBuilder::Options options = {})
QFormDataPartBuilder part(QAnyStringView name)
QFormDataBuilder &operator=(QFormDataBuilder &&other)

详细说明

QFormDataBuilder 类可用于创建QHttpMultiPart 对象,其内容类型默认设置为 FormDataType。

下面的代码段演示了如何使用 QFormDataBuilder 创建多部分消息:

QFormDataBuilder builder;
QFile image(u"../../pic.png"_s); image.open(QFile::ReadOnly);
QFile mask(u"../../mask.png"_s); mask.open(QFile::ReadOnly);

builder.part("image"_L1).setBodyDevice(&image, "the actual image");
builder.part("mask"_L1).setBodyDevice(&mask, "the mask image");
builder.part("prompt"_L1).setBody("Lobster wearing a beret");
builder.part("n"_L1).setBody("2");
builder.part("size"_L1).setBody("512x512");

std::unique_ptr<QHttpMultiPart> mp = builder.buildMultiPart();

另请参阅 QHttpPart,QHttpMultiPart, 和QFormDataPartBuilder

成员类型文档

枚举类 QFormDataBuilder::Option
flags QFormDataBuilder::Options

控制buildMultiPart() 的选项。

当前的几个 RFC 对于如何准确格式化multipart/form-data 存在分歧。与硬编码任何一个 RFC 不同,这些选项让您可以控制遵循哪个 RFC。

常量说明
QFormDataBuilder::Option::Default0x00默认值,旨在最大限度地提高互操作性。以下所有选项均为关闭状态。
QFormDataBuilder::Option::OmitRfc8187EncodedFilename0x01当 body-part 的文件名包含非 US-ASCII 字符时,RFC 6266 第 4.3 节建议使用RFC 8187 风格编码 (filename*=utf-8''...)。不过,最新的RFC 7578 第 4.2 节禁止使用该机制。截至本文撰写时,这两个 RFC 都是最新的,因此该选项允许你选择遵循哪一个。默认情况下,按照 RFC 6266 的建议,将 RFC 8187 编码的filename* 与未编码的filename 并列。
QFormDataBuilder::Option::UseRfc7578PercentEncodedFilename0x02当 body-part 的文件名包含非 US-ASCII 字符时,RFC 7578 第 4.2 节建议对 UTF-8 编码文件名的八进制字节使用百分比编码。不过,RFC 7578 第 4.2 节还指出,许多实现并对 UTF-8 编码的文件名进行百分位编码,而只是发射 "原始 "UTF-8("\ 使用\ 转义)。这也是QFormDataBuilder 的默认设置。
QFormDataBuilder::Option::PreferLatin1EncodedFilename0x04RFC 5987 第 3.2 节要求接收方支持 ISO-8859-1 ("Latin-1")编码。如果正文部分的文件名包含非 US-ASCII 字符,但适合 Latin-1 编码,该选项会优先使用 ISO-8859-1 编码,而不是 UTF-8。最新的 {https://datatracker.ietf.org/doc/html/rfc8187#appendix-A}{RFC 8187} 不再要求支持 ISO-8859-1,因此默认情况下会以 UTF-8 编码发送所有非 US-ASCII 文件名。
QFormDataBuilder::Option::StrictRfc7578OmitRfc8187EncodedFilename | UseRfc7578PercentEncodedFilename该选项与其他选项相结合,可选择严格遵守RFC 7578

Options 类型是QFlags<Option> 的类型定义。它存储 Option 值的 OR 组合。

成员函数文档

QFormDataBuilder::QFormDataBuilder()

构造一个空的 QFormDataBuilder 对象。

[noexcept] QFormDataBuilder::QFormDataBuilder(QFormDataBuilder &&other)

Move- 构造一个 QFormDataBuilder 实例,使其指向other 所指向的同一对象。

[noexcept] QFormDataBuilder::~QFormDataBuilder()

销毁QFormDataBuilder 对象。

std::unique_ptr<QHttpMultiPart> QFormDataBuilder::buildMultiPart(QFormDataBuilder::Options options = {})

构造并返回指向根据options 构造的 QHttpMultipart 对象的指针。

另请参见 QHttpMultiPart

QFormDataPartBuilder QFormDataBuilder::part(QAnyStringView name)

使用name 作为表单数据的name 参数,返回一个新构建的QFormDataPartBuilder 对象。只要相关的QFormDataBuilder 没有被销毁,该对象就一直有效。

出于互操作性考虑,强烈建议name 字符限制为 US-ASCII。

另请参阅 QFormDataPartBuilderQHttpPart

[noexcept] QFormDataBuilder &QFormDataBuilder::operator=(QFormDataBuilder &&other)

Move-assignsother 到此QFormDataBuilder 实例。

© 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.