Spec-Zone.ru › Qt 5.15

Класс QHttpPart

Класс QHttpPart содержит часть тела, используемую внутри сообщения HTTP в формате MIME с множественной частью. Подробнее...

Заголовок: #include <QHttpPart>
qmake: QT += network
С версии: Qt 4.8

Этот класс был представлен в Qt 4.8.

  • Список всех членов, включая унаследованные

Открытые функции

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 в формате 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), формат raw будет проанализирован, и соответствующий "обработанный" заголовок также будет установлен.

Примечание: Установка одного и того же заголовка дважды перезаписывает предыдущее значение. Для достижения поведения нескольких HTTP-заголовков с одинаковым именем следует объединить два значения, разделив их запятой (",") и установить один единственный raw-заголовок.

См. также 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-5.15/qhttppart.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API