Пакет: matlab.net.http.io
Суперклассы: handle
, matlab.mixin.Heterogeneous
ContentProvider для полезных данных HTTP-сообщений
A- ContentProvider предоставляет данные для HTTP- RequestMessage
пока сообщение подается. Простой провайдер преобразует данные из MATLAB® введите в байтовый поток. Более сложные провайдеры могут транслировать данные на сервер, получая или генерируя данные одновременно с их отправкой, что избегает необходимости иметь все данные в памяти перед началом сообщения.
Обычно при отправке данных в веб-сервис (обычно в запросе PUT или POST) создается RequestMessage
и вставить данные в виде MessageBody
объект в RequestMessage.Body
свойство. Когда вы отправляете это сообщение с помощью RequestMessage.send
MATLAB преобразует эти данные в байтовый поток, который будет отправлен на сервер, преобразуя его на основе Content-Type сообщения и типа данных в Body.Data
. См. MessageBody.Data
для этих правил преобразования.
Вместо вставки MessageBody
объект в RequestMessage.Body
свойство, можно создать ContentProvider
объект и вставьте его вместо этого. Затем, когда вы отправляете сообщение, MATLAB вызывает методы в ContentProvider
получить буферы данных для отправки во время отправки сообщения.
Вставляете ли вы MessageBody
или ContentProvider
в сообщение, вызов на RequestMessage.send
не возвращается (то есть блокируется) до тех пор, пока не будет отправлено все сообщение и получен ответ, или не произошла ошибка. Но с ContentProvider
MATLAB производит периодические коллбэки в провайдер, чтобы получить буферы данных для отправки, во время блокировки отправки. В этих коллбэках, ваши ContentProvider
может получить данные из любого источника, такого как файл, массив MATLAB, датчик оборудования, функция MATLAB и т.д. Задачей провайдера является преобразование этих данных в байтовый поток в виде буферов uint8, которые могут быть отправлены в сеть.
ContentProvider
- абстрактный класс, предназначенный для авторов классов в подкласс с их собственным генератором данных или конвертером, или можно использовать (или подкласс) один из поставщиков MATLAB, которые генерируют данные для вас из различных источников, не записывая подкласс. Эти провайдеры имеют опции, которые дают вам более гибкий контроль над тем, как данные получаются и преобразуются, по сравнению с автоматическими преобразованиями, которые происходят, когда вы вставляете данные непосредственно в MessageBody
. Используйте один из ContentProvider
подклассы:
Даже если вам не нужно транслировать данные, использование одного из этих провайдеров может упростить процесс отправки определенных типов содержимого, так как они преобразуют данные из внутренней формы в uint8
поток. Для примера, FormProvider
позволяет отправлять ответы форм на сервер, где можно удобно выразить данные как массив QueryParameter
объекты. MultipartFormProvider
позволяет отправлять отклики многопартичных форм, упрощая создание откликов на многопартичные формы. Использование любых ContentProvider
, вам нужно понять тип содержимого, которое сервер ожидает от вас отправить.
The matlab.net.http.io.ContentProvider
класс является handle
класс.
Самое простое ContentProvider
требуется только реализация getData
способ обеспечения буферов данных по мере их запроса MATLAB. Чтобы использовать вашего провайдера, вставьте его в Body
свойство RequestMessage
. В этом примере третий аргумент к RequestMessage
конструктор, a MyProvider
объект, переходит в Body
:
provider = MyProvider; req = matlab.net.http.RequestMessage('put', headers, provider); resp = req.send(uri);
Вот пример a MyProvider
класс, считываемый из имени файла, переданного в качестве аргумента конструктору и отправляющего его в Интернет. Для хорошей меры мы закрываем файл в конце или когда этот провайдер удаляется.
classdef MyProvider < matlab.net.http.io.ContentProvider properties FileID double end methods function obj = MyProvider(name) obj.FileID = fopen(name); end function [data, stop] = getData(obj, length) [data, len] = fread(obj.FileID, length, '*uint8'); stop = len < length; if (stop) fclose(obj.FileID); obj.FileID = []; end end function delete(obj) if ~isempty(obj.FileID) fclose(obj.FileID); obj.FileID = []; end end end end
MATLAB вызывает complete
провайдера метод, когда он формирует новое сообщение для отправки. Цель состоит в том, чтобы позволить поставщику подготовиться к новому сообщению и добавить все необходимые поля заголовка к сообщению. MATLAB вызывает
start
провайдера метод, когда пришло время отправить данные, но перед первым вызовом в
getData
.
ContentConsumer
| FileProvider
| FormProvider
| ImageProvider
| JSONProvider
| MessageBody
| MultipartFormProvider
| MultipartProvider
| QueryParameter
| RequestMessage
| StringProvider