Класс QHttpPart
Класс QHttpPart содержит часть тела, используемую внутри HTTP-сообщения в формате multipart MIME. Подробнее...
| Заголовок: | #include <QHttpPart> |
| qmake: | QT += network |
| С момента: | Qt 4.8 |
Открытые функции
| 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=(QHttpPart &&other) |
| QHttpPart & | operator=(const QHttpPart &other) |
| bool | operator==(const QHttpPart &other) const |
Подробное описание
Класс QHttpPart содержит часть тела, используемую внутри HTTP-сообщения в формате multipart MIME.
Класс 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()
Создаёт пустой объект QHttpPart.
QHttpPart::QHttpPart(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==().
QHttpPart &QHttpPart::operator=(QHttpPart &&other)
Оператор перемещающей присваивания.
QHttpPart &QHttpPart::operator=(const QHttpPart &other)
Создаёт копию other.
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.9/qhttppart.html