Пакет: 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 end
MATLAB вызывает complete
провайдера метод, когда это формирует новое сообщение, чтобы отправить. Цель состоит в том, чтобы позволить провайдеру готовиться к новому сообщению и добавлять любые необходимые поля заголовка в сообщение. MATLAB вызывает
start
провайдера метод, когда пора отправить данные, но перед первым вызовом
getData
.
RequestMessage
| MessageBody
| FileProvider
| StringProvider
| JSONProvider
| ImageProvider
| MultipartProvider
| FormProvider
| MultipartFormProvider
| QueryParameter
| ContentConsumer