matlab.net.http.io.MultipartConsumer class

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

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

Описание

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

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

Разделите авторов на подклассы

Если вы пишете свой собственный ContentConsumer, это будет обычно работать, является ли это потребителем верхнего уровня (заданный в качестве 3-го аргумента к 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 делегата метод возвращает [] указать, что нет никакого максимального желаемого 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

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 метод потребителя вызова (delegator) устанавливает 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.

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

Атрибуты:

GetAccess
protected
SetAccess
protected

Методы

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

Больше о

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

Введенный в R2018a