Пакет: matlab.net.http.io
Суперклассы: handle, matlab.mixin.Heterogeneous
ContentProvider для полезных нагрузок сообщений HTTP
ContentProvider предоставляет данные для HTTP RequestMessage Простой провайдер преобразует данные из типа MATLAB ® в поток байтов. Более сложные провайдеры могут передавать данные на сервер, получая или генерируя данные одновременно с отправкой, что позволяет избежать необходимости иметь все данные в памяти до начала сообщения.
Как правило, при отправке данных в веб-службу (обычно в запросе PUT или POST) создается RequestMessage и вставить данные в виде MessageBody объект в RequestMessage.Body собственность. При отправке сообщения с помощью RequestMessage.sendMATLAB преобразует эти данные в поток байтов для отправки на сервер, преобразуя их на основе типа содержимого сообщения и типа данных в 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, вы должны понимать тип контента, который сервер ожидает от вас отправки.
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);
Вот пример 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