matlab.net.http.io.MultipartConsumer class

Пакет: matlab.net.http.io
Суперклассы: matlab.net.http.io.GenericConsumer

Помощник для многопартийных типов содержимого в HTTP-сообщениях

Описание

Этот потребитель обрабатывает сообщения отклика HTTP с несколькими частями. Сообщение из нескольких частей является сообщением, поле заголовка Content-Type которого задает "multipart", и тело которого содержит одну или несколько частей. Каждая деталь содержит свой собственный набор полей заголовка, описывающих деталь, наиболее важным из которых является поле Content-Type.

The matlab.net.http.io.MultipartConsumer класс является handle класс.

Авторы подкласса

Если вы пишете свои собственные ContentConsumer, это обычно работает, является ли это потребителем верхнего уровня (задается как 3-й аргумент RequestMessage.send method) или часть многочастного сообщения (если задано как «делегат» в MultipartConsumer вызов конструктора). MultipartConsumer делает его кажущимся каждому делегату, как если бы он обрабатывал все ответное сообщение, в то же время собирая результаты в массив ResponseMessages сохранено в возвращенном response.Body.Data свойство.

Следующее описывает MultipartConsumer поведение:

Каждый раз, когда это MultipartConsumer получает полную часть сообщения от сервера, анализирует все заголовки в детали, а затем вызывает соответствующего делегированного потребителя, соответствующего полю Content-Type в детали. Если в детали нет поля Content-Type, он принимает, что тип text/plain. Если нет делегата, способного обрабатывать тип, он использует обработку по умолчанию для детали на основе типа содержимого, как описано для GenericConsumer.

MultipartConsumer не вызывает делегата, пока он не получит полную часть MultipartConsumer. буферизует данные для детали, а в конце получения детали копирует все свойства видимости ContentConsumer от этого потребителя до делегата, очищает Response.Body делегата, устанавливает Header делегата в заголовок детали, а затем вызывает initialize делегата и start методы, сопровождаемые одним или несколькими вызовами в putData делегата метод, содержащий полезную нагрузку детали, с последующим вызовом putData(uint8.empty) для указания конца данных. Если делегат initialize метод возвращает false чтобы указать, что он не хочет обрабатывать деталь, полезная нагрузка детали обрабатывается с помощью поведения по умолчанию для Content-Type детали, как описано для GenericConsumer.

Если делегат start метод возвращает [] чтобы указать, что не существует максимального желаемого buffer size, MultipartConsumer делает всего один вызов в putData который обеспечивает полную полезную нагрузку компонента, за которой следует вызов в конце данных. В противном случае вызывается putData достаточно времени, чтобы поставить всю полезную нагрузку в единицах buffer size.

Если делегат putData метод устанавливает STOP возвращает значение к true чтобы указать, что она не хочет больше никаких данных, тогда MultipartConsumer закрывает соединение, чтобы завершить передачу, как если бы сообщение закончилось. Таким образом, делегат контролирует необходимость обработки оставшейся части исходного сообщения. Если putData возвращает SIZE от [], затем сообщение также заканчивается, но за исключением выдается вызывающему абоненту RequestMessage.send.

Если потребитель для детали был задан как указатель на функцию, а не как ContentConsumer тогда функция вызывается только при первой необходимости потребителя, а затем тот же образец потребителя используется для любых соответствующих частей одного и того же ответного сообщения. Для деталей, обработанных указателем на функцию, соответствующий ResponseMessage в Response.Body.Data содержит только заголовок для детали, поскольку функция не имеет доступа к ResponseMessage тело.

Делегированный потребитель может получить доступ к этому потребителю и его свойствам через свою MyDelegator свойство, хотя это редко необходимо.

Создание

Описание

consumer = MultipartConsumer(types,consumer) создает MultipartConsumer для обработки заданного types использование соответствующей consumer. Можно задать несколько пар аргументов в любом порядке как types1,consumer1,...,typesN,consumerN. MATLAB® выполняет поиск по types в порядке их появления и использования первого соответствия. Если среди заданных типов нет совпадений, MATLAB использует набор потребителей по умолчанию, в зависимости от типа.

consumer = MultipartConsumer(puthandle) создает ContentConsumer который вызывает функцию, заданную как puthandle для каждого вызова на putData этого потребителя способ.

Входные параметры

расширить все

Типы содержимого, заданные как строковые массивы, вектор символов или массив ячеек векторов символов. types задает типы содержимого с помощью синтаксиса "type/subtype". Для получения дополнительной информации смотрите matlab.net.http.io.GenericConsumer.

Потребитель содержимого, заданный как matlab.net.http.io.ContentConsumer объект, который может обрабатывать указанные типы, или указатель на функцию, возвращающую ContentConsumer который может обрабатывать эти типы.

Указатель на putData функция со следующими ContentConsumer.putData синтаксис:

[length,stop] = putData(data)

где data является uint8 массив и length - длина этого массива.

Используйте этот синтаксис, чтобы обработать все входы с сервера с помощью одной функции, когда вы знаете тип данных, которые возвращает сервер. Функция не имеет доступа к ResponseMessage или любую информацию о данном потребителе.

Свойства

расширить все

Общественная собственность

Часть сообщения с несколькими частями перед первым разделителем границ, если она имеется, задается как uint8. Потребитель устанавливает Preamble перед вызовом start метод в делегате. После того, как установите, Preamble значение никогда не изменяется.

Атрибуты:

GetAccess
public
SetAccess
private

Часть сообщения с несколькими частями, следующая за последним разделителем границ, если она имеется, задается как uint8. Потребитель устанавливает Epilogue когда сообщение заканчивается, после всех вызовов делегатам. Оно не устанавливается, если делегат прекращает передачу до окончания сообщения. Вы можете изучить это свойство после завершения передачи, например, когда RequestMessage.send возвращает.

Атрибуты:

GetAccess
public
SetAccess
private

Предлагаемый buffer size, заданный как uint64. MATLAB устанавливает AllocationLength к ожидаемому размеру буферов данных, переданных в putData. Фактический размер может быть меньше или больше. Чтобы улучшить эффективность, потребитель может использовать это значение для предварительного выделения пространства для обработки данных.

MATLAB устанавливает это свойство перед вызовом start способ для удобства подклассов.

Атрибуты:

GetAccess
public
SetAccess
public

Ожидаемая длина полезной нагрузки, заданная как uint64. Свойством обычно является Value свойство matlab.net.http.field.ContentLengthField в Header свойство.

Если ContentLength пуст, тогда длина не известна. Полезная нагрузка заканчивается, когда putData(uint8.empty) вызывается.

MATLAB устанавливает это свойство перед вызовом initializeдля удобства подклассов, которым может быть полезно знать длину данных.

Если это ContentConsumer является делегатом потребителя верхнего уровня, затем значение ContentLength может отличаться от ContentLength значение потребителя верхнего уровня.

Пример: numel(someData) где someData тип uint8

Атрибуты:

GetAccess
public
SetAccess
public

Тип мультимедиа полезной нагрузки, заданный как matlab.net.http.MediaType объект. Свойством обычно является Value свойство matlab.net.http.field.ContentTypeField в Header свойство. Если на ContentType свойство пустое, тогда ContentTypeField пуст или отсутствует.

MATLAB устанавливает это свойство перед вызовом initialize для удобства подклассов, которые могут захотеть изучить MediaType. Подклассы могут задать это свойство, если они определяют из данных, что это другое MediaType.

В конце переноса MATLAB копирует это значение в Response.Body.ContentType свойство.

Пример: 'application/octet-stream'

Атрибуты:

GetAccess
public
SetAccess
public

Заголовок обрабатываемой полезной нагрузки, заданный как matlab.net.http.HeaderField объект.

Потребители используют этот заголовок, чтобы определить, как обработать полезную нагрузку, которая отправляется им. Для потребителя верхнего уровня это значение аналогично Response.Header. Для делегата значение может быть другим. Для примера в многочастном сообщении, обработанном MultipartConsumer, это заголовок части, которую обрабатывает этот делегат. Делегат все еще может изучить Response.Header для заголовков исходного сообщения.

MATLAB устанавливает это свойство перед вызовом initialize, для удобства подклассов.

Атрибуты:

GetAccess
public
SetAccess
public

Завершенное RequestMessage который был отправлен, заданный как matlab.net.http.RequestMessage объект. Это окончательная RequestMessage после всех перенаправлений, который является completedrequest возвращаемое значение из send способ.

MATLAB устанавливает это свойство перед вызовом initialize, для удобства подклассов.

Атрибуты:

GetAccess
public
SetAccess
public

The ResponseMessage обрабатывается, задается как matlab.net.http.ResponseMessage объект.

MATLAB устанавливает Response свойство перед вызовом initialize. Значение является ResponseMessage после получения заголовков, но до получения полезной нагрузки. В начале обработки ответного сообщения (или в начале компонента для многопоточных сообщений) ResponseMesssage.Body свойство является MessageBody объект с пустыми Data и Payload свойства. Чтобы хранить полученные данные, потребители могут редактировать Response и MessageBody.Data свойства во время передачи данных. Обычно потребители, которые обрабатывают и затем хранят данные Response.Body.Data к их обработанной полезной нагрузке, хотя это не требуется. По завершении передачи MATLAB возвращает это Response к вызывающему абоненту send. Потребители не должны изменять другие Response свойства, такие как Header или StatusLine, поскольку эти изменения возвращаются вызывающему абоненту send.

The Response.Body.Payload свойство пусто во время передачи, и потребители не должны пытаться изменить его. Если на HTTPOptions.SavePayload задается свойство, затем устанавливается MATLAB Payload к полученной полезной нагрузке в конце передачи сообщения или части (после вызова на putData(uint8.empty)) или когда происходит исключение.

Если во время обработки сообщений у потребителя возникает исключение, MATLAB выдает HTTPException объект. The History свойство содержит это Response значение.

Если потребитель является делегатом, который обрабатывает часть многочастного сообщения, то Response.Header содержит заголовок всего сообщения и Payload и Data свойства Response.Body удаляются перед вызовом ContentConsumer для каждой части. По завершении каждой части, новый ResponseMessage добавляется в конец массива ResponseMessage объекты в Body.Data исходного отклика содержащий Header от этого объекта и Body от этого свойства. Следующий делегат видит свежую Response с пустым MessageBody, не предыдущий делегат MessageBody.

Атрибуты:

GetAccess
public
SetAccess
public
Dependent
true

Адрес назначения обрабатываемого запроса, заданный как matlab.net.URI объект. Это значение является исходным URI назначения, определяемым send. Это не URI прокси или конечный URI после перенаправлений.

MATLAB устанавливает это свойство перед вызовом initialize, для удобства подклассов.

Атрибуты:

GetAccess
public
SetAccess
public

Защищенные свойства

putData метод делегата, заданный как указатель на функцию или заданный как [] если CurrentDelegate задан.

Атрибуты:

GetAccess
protected
SetAccess
protected

Функция, заданная как указатель на функцию, вызывается putData метод для добавления дополнительных данных. The putData метод в этом классе вызывает AppendFcn функция для добавления данных, которые она получает в своей data аргумент существующим данным в ответном сообщении. Функция должна иметь подпись:

AppendFcn(consumer,newdata)

где newdata - данные, которые будут добавлены в массив в consumer.Response.Body.Data. В обязанности этого метода входит обновление consumer.CurrentLength для отражения новой длины Data. Если newdata пуст, что указывает на конец потока, тогда функция должна обновляться Response.Body.Data до его конечного значения.

Поведение по умолчанию, если это свойство пусто, использует внутреннюю функцию, которая обрабатывает Data как массив произвольных значений, поддерживающих horzcat функция. Он эффективно добавляет newdata путем предварительного выделения пространства, поддержания CurrentLength является фактической длиной хранимых данных. В конце сообщения он обрезает Response.Body.Data на CurrentLength.

Подклассы могут изменить это свойство, если horzcat не подходит для процесса добавления. Для примера, когда StringConsumer создает скалярную строку, она добавляет к строке с помощью plus функция вместо horzcat.

Подклассы, которые не вызывают ContentConsumer.putData для добавления данных, или которые удовлетворены horzcat поведение при добавлении данных может игнорировать это свойство.

Пример: @customAppend где @customAppend определяется потребителем

Атрибуты:

GetAccess
protected
SetAccess
protected

The ContentConsumer которому делегирует этот потребитель, задается как matlab.net.http.io.ContentConsumer объект. The delegateTo метод вызывающего потребителя (делегатор) устанавливает CurrentDelegate свойство. Если текущего делегирования нет, то значение [].

MATLAB устанавливает CurrentDelegate на [] перед вызовом initialize.

Атрибуты:

GetAccess
protected
SetAccess
protected

Длина данных в данный момент в Response.Body.Data свойство, заданное как uint64.

Это свойство используется при Response.Body.Data предварительно выделен размер, больший фактического объема хранимых в настоящее время данных, для указания длины этих хранимых данных. Если это свойство пусто, это означает, что все Response.Body.Data содержит сохраненные данные или ContentConsumer подкласс утилизирует данные каким-либо образом, кроме хранения их в Response.Body.Data.

Это свойство используется и устанавливается putData метод в этом базовом классе, когда AppendFcn свойство пустое. Именно в интересах подклассов вызываются putData и хотите изучить уже сохраненные данные и/или любые реализации AppendFcn которые поддерживают результаты в Response.Body.Data.

Подклассы, которые используют putData также может изменить это свойство, чтобы сбросить положение в буфере, где хранятся данные. Для примера, когда значение по умолчанию AppendFcn используется функция, подкласс, который обрабатывает все Response.Body.Data при каждом вызове putData возможно, больше не используется для исходных данных, поэтому он может сбросить CurrentLength свойство, равное 1, так что следующая putData вызов перезаписывает буфер новыми данными. Нет необходимости очищать элементы в буфере после окончания новых данных.

Подклассы, которые не вызывают putData может использовать это свойство для отслеживания собственных данных или может оставить его незаполненным (пустым). MATLAB не накладывает никаких ограничений на значение, которое может быть установлено здесь, и не использует его ни в каких целях, кроме как определить, где значение по умолчанию AppendFcn следует хранить следующий буфер данных и где обрезать данные в конце сообщения. Перед окончательным вызовом установите это свойство в пустое значение putData(uint8.empty) для предотвращения усечения данных.

MATLAB устанавливает это свойство пустым перед каждым вызовом initialize.

Атрибуты:

GetAccess
protected
SetAccess
protected

The ContentConsumer делегированный этому потребителю, указанный как matlab.net.http.io.ContentConsumer объект. Если этот потребитель является делегатом, который был вызван другим потребителем, таким как GenericConsumer или MultipartConsumer, тогда это вызывающий потребитель. Он пуст для потребителя верхнего уровня, указанного в вызове send.

Делегаты могут использовать это свойство для доступа к свойствам своих делегатов, например, чтобы определить, какой потребитель делегировал им.

Атрибуты:

GetAccess
protected
SetAccess
protected

Методы

расширить все

Подробнее о

расширить все

Введенный в R2018a