matlab.net.http.io.ContentProvider 클래스
네임스페이스: matlab.net.http.io
슈퍼클래스: handle, matlab.mixin.Heterogeneous
HTTP 메시지 페이로드에 대한 ContentProvider
설명
ContentProvider는 메시지가 전송되는 중에 HTTP RequestMessage에 대한 데이터를 제공합니다. 간단한 제공자는 데이터를 MATLAB® 유형에서 바이트 스트림으로 변환합니다. 보다 복잡한 제공자는 서버에 데이터를 스트리밍하여 데이터 전송과 동시에 데이터를 가져오거나 생성할 수 있기 때문에 메시지 시작 전에 모든 데이터를 메모리에 저장할 필요가 없습니다.
일반적으로 (보통 PUT 또는 POST 요청을 통해) 데이터를 웹 서비스로 전송할 때 RequestMessage를 생성하여 데이터를 MessageBody 객체 형식으로 RequestMessage.Body 속성에 삽입합니다. 이 메시지를 RequestMessage.send를 사용하여 전송하면 MATLAB은 데이터를 서버로 전송할 바이트 스트림으로 변환하는데, 이때 메시지의 Content-Type과 Body.Data 데이터 유형에 따라 변환을 수행합니다. 이러한 변환 규칙에 대한 자세한 내용은 MessageBody.Data를 참조하십시오.
RequestMessage.Body 속성에 MessageBody 객체를 삽입하는 대신 ContentProvider 객체를 생성하여 삽입할 수 있습니다. 이렇게 하면 메시지를 전송할 때 MATLAB이 ContentProvider의 메서드를 호출하여 메시지가 전송되는 동안 전송할 데이터 버퍼를 가져옵니다.
메시지에 MessageBody나 ContentProvider를 삽입하면 RequestMessage.send를 호출해도 전체 메시지가 전송되어 응답이 수신되기 전까지 또는 오류가 발생하기 전까지 결과가 반환되지 않습니다(즉, 메서드의 호출이 차단됩니다). 반면 ContentProvider를 사용하면 send 메서드가 차단된 기간 동안 MATLAB이 제공자에게 주기적으로 콜백을 수행하여 전송할 데이터 버퍼를 가져옵니다. ContentProvider는 이러한 콜백을 통해 파일, MATLAB 배열, 하드웨어 센서, MATLAB 함수 등 어떠한 소스에서도 데이터를 가져올 수 있습니다. 제공자의 역할은 이러한 데이터를 웹으로 전송될 수 있는 uint8 버퍼 형태의 바이트 스트림으로 변환하는 것입니다.
ContentProvider는 클래스 작성자가 자체 데이터 생성기나 변환기를 사용하여 서브클래스를 작성하는 데 사용할 수 있는 추상 클래스입니다. 또는 서브클래스를 작성하지 않고도 다양한 소스에서 데이터를 생성하는 MATLAB 제공자 중 하나를 사용(또는 서브클래스화)할 수 있습니다. 이러한 제공자에는 MessageBody에 직접 데이터를 삽입할 때 이루어지는 자동 변환에 비해 데이터를 더욱 유연하게 가져오고 변환할 수 있는 다양한 옵션이 있습니다. 다음과 같은 ContentProvider 서브클래스 중 하나를 사용하십시오.
데이터를 스트리밍할 필요가 없더라도, 이러한 제공자 중 하나를 사용하면 데이터가 내부적인 형태에서 uint8 스트림으로 변환되기 때문에 특정 유형의 콘텐츠를 전송하는 과정이 간소화됩니다. 예를 들어, FormProvider를 사용하면 데이터를 QueryParameter 객체로 구성된 배열로 편리하게 표현하여 서버로 양식 응답을 전송할 수 있습니다. MultipartFormProvider를 사용하면 multipart 양식의 응답을 간편하게 생성하여 multipart 양식 응답을 전송할 수 있습니다. 이러한 ContentProvider를 사용하려면 서버에서 수신을 예상하는 콘텐츠의 유형에 대해 알고 있어야 합니다.
matlab.net.http.io.ContentProvider 클래스는 handle 클래스입니다.
서브클래스 작성자
가장 단순한 ContentProvider는 MATLAB이 요구하는 대로 데이터 버퍼를 제공하는 getData 메서드만 구현하면 됩니다. 제공자를 사용하려면 RequestMessage의 Body 속성에 제공자를 삽입하십시오. 이 예에서는 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은 데이터를 전송할 시점이 되면 getData를 최초로 호출하기 전에 먼저 제공자의 start 메서드를 호출합니다.
속성
메서드
세부 정보
버전 내역
R2018a에 개발됨
