Пакет: matlab.net.http.io
Суперклассы: handle, matlab.mixin.Heterogeneous
ContentProvider для HTTP передают полезные нагрузки
ContentProvider снабжает данными для RequestMessage HTTP в то время как сообщение отправляется. Простой провайдер преобразует данные от типа MATLAB® до потока байтов. Более комплексные провайдеры могут передать данные потоком к серверу, получив, или генерируя данные одновременно это отправляется, который избегает потребности иметь все данные в памяти перед запуском сообщения.
Обычно, при отправке данных в веб-сервис (обычно в PUT или запросе POST), вы создали бы RequestMessage и вставьте данные в форме MessageBody объект в RequestMessage.Body свойство. Когда вы отправляете то сообщение с помощью RequestMessage.send, MATLAB преобразует те данные в поток байтов, который будет отправлен в сервер, преобразовывая его на основе Типа контента сообщения и типа данных в 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, необходимо изучить тип содержимого, которое сервер ожидает, что вы отправите.
matlab.net.http.io.ContentProvider классом является handle класс.
Самый простой ContentProvider должна только реализовать getData метод, чтобы обеспечить буферы данных как MATLAB запрашивает их. Чтобы использовать вашего провайдера, вставьте его в в Body свойство RequestMessage. В этом примере, третьем аргументе к RequestMessage конструктор, MyProvider возразите, входит в Body:
provider = MyProvider;
req = matlab.net.http.RequestMessage('put', headers, provider);
resp = req.send(uri);
Вот является пример 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