Пакет: 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
.
ContentConsumer
| FileProvider
| FormProvider
| ImageProvider
| JSONProvider
| MessageBody
| MultipartFormProvider
| MultipartProvider
| QueryParameter
| RequestMessage
| StringProvider