Класс QHttpPart
Класс QHttpPart содержит часть тела, используемую внутри сообщения HTTP multipart 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 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-5.14/qhttppart.html