Класс 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/archives/qt-5.11/qhttppart.html