Пакет: 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 использует группу по умолчанию потребителей, в зависимости от типа.
FileConsumer
| GenericConsumer
| ImageConsumer
| MediaType
| MessageBody
| MultipartProvider
| RequestMessage
| ResponseMessage