Пакет: matlab.net.http.io
Суперклассы: handle, matlab.mixin.Heterogeneous
ContentProvider для полезных данных HTTP-сообщений
A- ContentProvider предоставляет данные для HTTP- RequestMessage пока сообщение подается. Простой провайдер преобразует данные из MATLAB® введите в байтовый поток. Более сложные провайдеры могут транслировать данные на сервер, получая или генерируя данные одновременно с их отправкой, что избегает необходимости иметь все данные в памяти перед началом сообщения.
Обычно при отправке данных в веб-сервис (обычно в запросе PUT или POST) создается RequestMessage и вставить данные в виде MessageBody объект в RequestMessage.Body свойство. Когда вы отправляете это сообщение с помощью RequestMessage.sendMATLAB преобразует эти данные в байтовый поток, который будет отправлен на сервер, преобразуя его на основе Content-Type сообщения и типа данных в Body.Data. См. MessageBody.Data для этих правил преобразования.
Вместо вставки MessageBody объект в RequestMessage.Body свойство, можно создать ContentProvider объект и вставьте его вместо этого. Затем, когда вы отправляете сообщение, MATLAB вызывает методы в ContentProvider получить буферы данных для отправки во время отправки сообщения.
Вставляете ли вы MessageBody или ContentProvider в сообщение, вызов на RequestMessage.send не возвращается (то есть блокируется) до тех пор, пока не будет отправлено все сообщение и получен ответ, или не произошла ошибка. Но с ContentProviderMATLAB производит периодические коллбэки в провайдер, чтобы получить буферы данных для отправки, во время блокировки отправки. В этих коллбэках, ваши 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
endMATLAB вызывает complete провайдера метод, когда он формирует новое сообщение для отправки. Цель состоит в том, чтобы позволить поставщику подготовиться к новому сообщению и добавить все необходимые поля заголовка к сообщению. MATLAB вызывает start провайдера метод, когда пришло время отправить данные, но перед первым вызовом в getData.
ContentConsumer | FileProvider | FormProvider | ImageProvider | JSONProvider | MessageBody | MultipartFormProvider | MultipartProvider | QueryParameter | RequestMessage | StringProvider