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

Пакет: 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

общественность

SetAccess

частный

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

Атрибуты:

GetAccess

общественность

SetAccess

частный

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

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

Атрибуты:

GetAccess

общественность

SetAccess

общественность

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

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

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

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

Пример: numel(someData), где someData является типом uint8

Атрибуты:

GetAccess

общественность

SetAccess

общественность

Тип носителя полезной нагрузки, заданной как объект 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

общественность

SetAccess

общественность

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

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

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

Атрибуты:

GetAccess

общественность

SetAccess

общественность

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

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

Атрибуты:

GetAccess

общественность

SetAccess

общественность

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

общественность

SetAccess

общественность

Зависимый

tRUE

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

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

Атрибуты:

GetAccess

общественность

SetAccess

общественность

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

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

Атрибуты:

GetAccess

защищенный

SetAccess

защищенный

Функция, заданная как указатель на функцию, вызванный методом 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

защищенный

SetAccess

защищенный

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

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

Атрибуты:

GetAccess

защищенный

SetAccess

защищенный

Длина данных в настоящее время в свойстве 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

защищенный

SetAccess

защищенный

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

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

Атрибуты:

GetAccess

защищенный

SetAccess

защищенный

Методы

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

Больше о

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

Введенный в R2018a