exponenta event banner

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

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

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

Описание

Этот поставщик помогает создавать многопутевые HTTP-сообщения.

Тип содержимого по умолчанию: "multipart/mixed"и полезная нагрузка сообщения содержит произвольное количество частей, причем каждая часть содержит собственный заголовок, описывающий эту часть. Дополнительные сведения о многопутевых сообщениях см. в RFC 2046, раздел 5,1.

Используйте этого поставщика напрямую, только если известно, что сервер принимает многопутевые/смешанные сообщения. Обычно серверы, принимающие многопутевые сообщения, требуют "multipart/form-data", который реализуется подклассом MultipartFormProvider. С помощью подклассов можно реализовать другие типы компонентов.

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

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

Каждая из частей многопутевого сообщения может быть указана как данные в любом из форматов, разрешенных для RequestMessage.Body, или как ContentProvider создает данные. ContentProvider объекты, которые используются для предоставления данных для деталей, называются делегатами, в то время как это MultipartProvider является поставщиком верхнего уровня. В общем, любой ContentProvider подходит в качестве делегата. MultipartProvider вызывает каждого делегата по очереди при отправке сообщения, вызывая его методы, такие как complete или start, так что делегат вообще не должен знать, что он предоставляет содержимое для части, а не для целого сообщения.

Этот поставщик всегда передает RequestMessage как порции, поэтому он не включает поле заголовка Content-Length в сообщение или в заголовки любой из частей. В то время как MultipartProvider вызывает каждого делегата expectedContentLength перед отправкой детали он использует только возвращаемое значение (если оно не является пустым) для принудительного применения длины, а не для создания поля Content-Length. Если делегат хочет, чтобы в детали появилось поле Content-Length, он должен вставить такое поле явно в его Header собственность. Ни один из ContentProvider подклассы, предоставляемые MATLAB ®, выполняют эту обработку.

Создание

Описание

provider = MultipartProvider(part1,...,partN) создает MultipartProvider который отправляет указанные части в указанном порядке в HTTP-запросе. По умолчанию этот поставщик устанавливает для типа содержимого сообщения значение "multipart/mixed", но подклассы могут изменить подтип, установив Subtype собственность. Конструктор задает элементы Parts массив ячеек свойств для каждого part1,...,partN аргумент.

Свойства

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

Общедоступные свойства

Части тела сообщения, указанные как массив ячеек одного или нескольких из следующих значений:

ContentProvider объект

MultipartProvider делегирует создание детали указанному поставщику (называемому делегатом), вызывая его полный метод для получения информации заголовка о детали и ее getData способ получения данных. Делегат Header используется для заголовка части. Любой подкласс ContentProvider можно указать здесь. Как правило, делегат не указывает длину содержимого и не реализует expectedContentLength поскольку конец детали обозначается строкой границы, а не полем заголовка. Если этот метод реализован для возврата непустого значения, то значение используется только для принудительного применения длины содержимого, а не для создания поля Content-Length.

RequestMessage объект

MultipartProvider отправляет Header и Body из RequestMessage в качестве части, если Тело Payload установлено свойство, которое используется для необработанной полезной нагрузки. В противном случае Тело Data свойство преобразуется на основе его типа или поля Content-Type в Header, как описано для MessageBody.Data. Эта опция полезна, если у вас есть данные для отправки и вы хотите воспользоваться преимуществами обработки по умолчанию этих данных, которые MATLAB обычно делает при отправке RequestMessage. Он позволяет указать пользовательские поля заголовка в запросе, которые будут использоваться в качестве элементов Header и управлять преобразованием данных без необходимости записи ContentProvider подкласс. RequestMessage.RequestLine свойство игнорируется.

MessageBody объект

MessageBody обрабатывается так же, как если бы он был в RequestMessage без поля Content-Type. Эта опция полезна, если обработки данных по умолчанию на основе их типа достаточно, и нет необходимости указывать какие-либо настраиваемые поля заголовка для детали. MATLAB вставляет поле Content-Type в деталь на основе типа данных. Посмотрите MessageBody.Data для правил преобразования.

Массив ContentProvider, RequestMessageи/или MessageBody объекты

При этом каждый элемент массива рассматривается как часть, а не как массив ячеек.

Дескриптор для getData метод

Этот метод должен иметь подпись ContentProvider.getData. В этом случае для типа содержимого детали устанавливается значение "application/octet-stream", поэтому эта опция полезна для отправки двоичных данных. При использовании этой опции нельзя указать пользовательские поля заголовка для детали.

Любой другой тип

Если тип не соответствует ни одному из этих типов и не является дескриптором функции, то он обрабатывается так, как если бы он присутствовал в Data свойство MessageBody. См. описание для MessageBody типы.

Атрибуты:

GetAccess
public
SetAccess
public
Dependent
true

Поля заголовка сообщения или части, указанные как вектор одного или нескольких matlab.net.http.HeaderField объекты.

Это свойство используется только авторами подкласса. MATLAB устанавливает это свойство перед вызовом complete способ. Для непутевых сообщений MATLAB инициализирует это свойство для содержимого Request.Header, минус любой matlab.net.http.field.GenericFields или пустые поля. ContentProvider использует это свойство для добавления полей заголовка, описывающих отправляемые данные, или для добавления параметров в поля заголовка, уже содержащиеся в сообщении. В делегате для MultipartProvider, MATLAB инициализирует это свойство для полей заголовка, которые поставщик делегирования намерен вставить для детали. Делегаты могут изменять или изменять эти поля.

По возвращении от провайдера complete метод, если это не многопутевое сообщение, то MATLAB считывает это свойство и объединяет его содержимое в заголовок Request. Поля в этом Header с Names которые еще не появились в Request.Header добавляются в конец Request.Header. Если поле в этом поле Header имеет Name это то же самое, что и в Request.Header, и оба имеют непустые Values, то:

  • Если в Request.Header является GenericField, то игнорировать один в Header.

  • Если в Request.Header не является GenericField, затем замените его на Header.

Если один или оба из них имеют пустой Value, то поле удаляется из Request.Header и не добавляется как часть обычного завершения сообщения.

Если это делегат MultipartProvider, то все содержимое этого Header используется в качестве заголовка части. Многопартийные делегаты не должны предполагать, что Request.Header содержит любые поля, относящиеся к их собственным Header. Поставщик может определить, является ли он многосторонним делегатом, проверив, MyDelegator является MultipartProvider, хотя этот тест вряд ли понадобится.

MATLAB считывает это свойство только по возвращении из вызова поставщика complete способ. Изменения в этом массиве игнорируются при вызове MATLAB start.

Авторы классов должны знать, что их подклассы могли добавить поля к этому Header (в их complete метод) перед вызовом complete в их суперклассе. Лучше всего сохранять такие поля и не добавлять поля с одинаковыми именами. Однако добавление параметра в поле допустимо. Например, суперкласс может добавить параметр набора символов к существующему полю Content-Type, у которого его еще нет.

Атрибуты:

GetAccess
public
SetAccess
public

Укажите, следует ли принудительно использовать кодирование передачи с порциями, указанное как логическое. Это свойство представляет интерес только для авторов подкласса и применимо только для поставщиков, не являющихся делегатами нескольких частей. Набор подклассов ForceChunked для управления тем, должно ли содержимое отправляться с использованием кодирования передачи с порциями. Если false (по умолчанию) MATLAB решает, следует ли отправлять порции содержимого, на основании того, знает ли он длину содержимого на момент готовности сообщения к отправке:

  • Если MATLAB знает длину содержимого (что имеет место, если сообщение содержит поле Content-Length или если этот поставщик expectedContentLength метод вернул число), затем MATLAB решает, отправлять ли его порциями или нет.

  • Если MATLAB не знает длину содержимого (нет поля Content-Length в заголовке и expectedContentLength возвращено пустым), то MATLAB всегда отправляет сообщение с порциями.

Если ForceChunked является trueзатем MATLAB посылает сообщение, порционированное независимо от того, знает ли оно длину содержимого, если известная длина не меньше размера блока. Если это свойство true, тогда сообщение не должно содержать поле Content-Length, так как HTTP не позволяет использовать поле Content-Length для секционированного сообщения. Однако можно вернуть ненулевое значение в expectedContentLength если вы хотите, чтобы MATLAB проверял, что вы возвращаете ожидаемую длину данных.

Когда MATLAB выбирает отправку порции сообщения, размер каждого порции равен длине данных, возвращаемых getData.

MATLAB считывает это значение после вызова complete метод, перед вызовом start. Это поле не устанавливается.

Атрибуты:

GetAccess
public
SetAccess
public

Запрос на отправку сообщения, указанного как matlab.net.http.RequestMessage объект.

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

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

Если поставщик желает добавить какие-либо поля заголовка к этому сообщению или изменить существующие, он должен сделать это в своем complete путем добавления этих полей к Header собственность. Вызывающий абонент complete (RequestMessage или поставщик делегирования) определяет, что делать с этими полями. RequestMessage.send и RequestMessage.complete всегда копировать эти поля в Header из RequestMessage. Делегирующий поставщик может скопировать поля в свои собственные Header или вставить их в сообщение (как в случае MultipartProvider). Дополнительные сведения см. в разделе Свойство Header.

Это свойство доступно только для чтения.

Атрибуты:

GetAccesspublic
SetAccessmatlab.net.http.RequestMessage

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

Подтип поставщика, указанный как строка. Значение по умолчанию "mixed" добавляет набор заголовков Content-Type в "multipart/mixed" к сообщению плюс соответствующие параметры. Подклассы могут изменять это значение в конструкторе или complete способ. Это значение появляется в Content-Type после "multipart/".

Атрибуты:

GetAccess
protected
SetAccess
protected

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

complete методы устанавливают это свойство пустым.

Атрибуты:

GetAccess
protected
SetAccess
protected

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

Если ContentProvider делегирует ответственность за отправку всех или части данных сообщения другому поставщику, затем это свойство идентифицирует делегирующего поставщика делегату. Например, MultipartProvider делегирует части сообщения другим провайдерам, поэтому вставляет дескриптор в себя в каждом делегате. В противном случае MyDelegator пуст. delegateTo задает это свойство в делегате.

Атрибуты:

GetAccess
protected
SetAccess
protected

Методы

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

Подробнее

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

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