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 end
MATLAB은 전송할 새 메시지를 생성할 때 제공자의 complete
메서드를 호출합니다. 그 목적은 제공자가 새 메시지에 대해 준비하고 이 메시지에 필요한 헤더 필드를 추가하도록 하는 것입니다. MATLAB은 데이터를 전송할 시점이 되면 getData
를 최초로 호출하기 전에 먼저 제공자의 start
메서드를 호출합니다.
속성
메서드
세부 정보
버전 내역
R2018a에 개발됨