exponenta event banner

matlab.net.http.io.MultipartConsumer класс

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

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

Описание

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

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

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

Если вы пишете свой собственный ContentConsumer, он, как правило, будет работать, является ли он потребителем верхнего уровня (указан в качестве третьего аргумента для RequestMessage.send метод) или часть многопутевого сообщения (если указано как «делегат» в 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 чтобы указать, что он не хочет обрабатывать деталь, полезная нагрузка детали обрабатывается с использованием поведения по умолчанию для типа содержимого детали, как описано для GenericConsumer.

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

Если делегат 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

Предлагаемый размер буфера, указанный как 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

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.

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

Если в процессе обработки сообщений у потребителя возникает особая ситуация, MATLAB выдает HTTPException объект. 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 способ добавления дополнительных данных. 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

ContentConsumer которому этот потребитель делегирует, указанный как matlab.net.http.io.ContentConsumer объект. 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

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

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

Атрибуты:

GetAccess
protected
SetAccess
protected

Методы

развернуть все

Подробнее

развернуть все

Представлен в R2018a