Класс QHttpPart
Класс QHttpPart содержит часть тела, используемую внутри сообщения HTTP multipart MIME. Подробнее...
| Заголовок: | #include <QHttpPart> |
| CMake: | find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
Открытые функции
| QHttpPart(const QHttpPart &other) | |
| QHttpPart() | |
| QHttpPart & | operator=(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 |
| bool | operator==(const QHttpPart &other) const |
Подробное описание
Класс QHttpPart содержит часть тела, используемую внутри сообщения HTTP multipart 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(). Последний метод экономит память, не копируя данные, а читая их непосредственно из устройства. Это означает, что устройство должно быть открытым и доступным для чтения в момент отправки сообщения multipart, содержащего часть тела, по сети через 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 не получает владения устройством при установке, поэтому разработчик отвечает за его уничтожение, когда оно больше не нужно. Хорошей идеей может быть назначение устройства родительским объектом сообщения multipart, как описано в документации для QHttpMultiPart.
См. также QHttpMultiPart и QNetworkAccessManager.
Документация по функциям-членам
QHttpPart::QHttpPart(const QHttpPart &other)
Создаёт копию other.
QHttpPart::QHttpPart()
Конструирует пустой объект QHttpPart.
QHttpPart &QHttpPart::operator=(const QHttpPart &other)
Создаёт копию other.
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 является последовательным (например, сокеты, но не файлы), QNetworkAccessManager::post() следует вызывать после того, как device выпустит событие finished(). Для отмены устройства и использования данных, установленных с помощью 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().
void QHttpPart::swap(QHttpPart &other)
Меняет местами эту часть HTTP с other. Эта функция очень быстрая и никогда не терпит неудачу.
Эта функция была введена в Qt 5.0.
bool QHttpPart::operator!=(const QHttpPart &other) const
Возвращает true если этот объект не совпадает с other.
См. также operator==().
bool QHttpPart::operator==(const QHttpPart &other) const
Возвращает true если этот объект совпадает с other (т.е. если у них одинаковые заголовки и тело).
См. также operator!=().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qhttppart.html