Main Content

matlab.net.http.io.MultipartConsumer 클래스

네임스페이스: matlab.net.http.io
슈퍼클래스: matlab.net.http.io.GenericConsumer

HTTP 메시지 내 multipart 콘텐츠 유형에 대한 헬퍼

설명

이 소비자는 multipart HTTP 응답 메시지를 처리합니다. multipart 메시지는 Content-Type 헤더 필드가 "multipart"로 지정되어 있고 본문이 하나 이상의 파트로 구성된 메시지입니다. 각 파트는 해당 파트를 설명하는 자체 헤더 필드 세트를 갖고 있으며, 그중에서 Content-Type 필드가 가장 중요합니다.

matlab.net.http.io.MultipartConsumer 클래스는 handle 클래스입니다.

서브클래스 작성자

자신만의 ContentConsumer를 작성하는 경우, 최상위 소비자이든(RequestMessage.send 메서드의 3번째 인수로 지정됨) multipart 메시지의 파트이든(MultipartConsumer 생성자 호출 시 "delegate"로 지정된 경우) 일반적으로 무리 없이 작동합니다. MultipartConsumer는 실제로는 결과를 ResponseMessages의 배열로 조합해 반환된 response.Body.Data 속성에 저장하지만, 각 대리자에게는 MultipartConsumer가 마치 전체 응답 메시지를 처리하는 것처럼 보입니다.

다음은 MultipartConsumer 동작에 대한 설명입니다.

MultipartConsumer는 서버로부터 메시지의 온전한 한 파트를 수신할 때마다 해당 파트의 헤더를 구문 분석한 다음 해당 파트의 Content-Type 필드에 적절한 대리 소비자를 호출합니다. 해당 파트에 Content-Type 필드가 없으면 text/plain 유형이라고 간주합니다. 해당 유형을 처리할 수 있는 대리자가 없는 경우, GenericConsumer에 대해 설명된 대로 Content-Type에 따라 해당 파트에 대한 디폴트 처리를 사용하여 처리합니다.

MultipartConsumer는 한 파트를 온전히 수신하기 전까지는 대리자를 호출하지 않습니다. MultipartConsumer는 한 파트가 완전히 수신될 때까지 데이터를 버퍼링하고, 해당 파트의 수신이 끝나면 ContentConsumer의 표시된 모든 속성을 이 소비자로부터 대리자에게 복사한 다음 대리자의 Response.Body를 지우고, 대리자의 Header를 해당 파트의 헤더로 설정하고, 대리자의 initialize 메서드와 start 메서드를 호출한 다음, 해당 파트의 페이로드를 포함하여 대리자의 putData 메서드를 한 번 이상 호출하고, 그런 다음 데이터의 끝을 나타내기 위해 putData(uint8.empty)를 호출합니다. 대리자의 initialize 메서드가 해당 파트를 처리하기 원치 않음을 나타내는 false를 반환하면 해당 파트의 페이로드는 GenericConsumer에 대해 설명된 대로 Content-Type에 따라 해당 파트에 대한 디폴트 동작을 사용하여 처리됩니다.

대리자의 start 메서드가 원하는 최대 버퍼 크기가 없음을 나타내는 []을 반환하면 MultipartConsumer는 해당 파트에 대한 전체 페이로드를 제공하는 putData를 단 한 번 호출한 후, 데이터의 끝을 나타내기 위한 메서드를 호출합니다. 그 밖의 경우에는 전체 페이로드를 버퍼 크기 단위로 전송하는 데 필요한 횟수만큼 putData를 호출합니다.

대리자의 putData 메서드가 더 이상 데이터를 원치 않음을 나타내기 위해 STOP 반환 값을 true로 설정하면 MultipartConsumer는 마치 메시지가 종료된 것처럼 연결을 닫아 전송을 중단합니다. 대리자는 이러한 방식으로 원본 메시지의 나머지를 처리할지 여부를 제어합니다. putData[] 값의 SIZE를 반환하는 경우에도 메시지가 종료되지만, 이 경우 RequestMessage.send의 호출자에게 예외가 발생됩니다.

특정 파트의 소비자가 ContentConsumer 인스턴스가 아닌 함수 핸들로 지정된 경우, 이 함수는 소비자가 필요한 처음 한 번만 호출되고, 이후 동일한 응답 메시지의 해당하는 파트에 대해서는 동일한 소비자 인스턴스가 사용됩니다. 함수 핸들에 의해 처리되는 파트의 경우, 함수가 ResponseMessage 본문에 대한 액세스 권한이 없으므로 Response.Body.Data의 해당 ResponseMessage는 해당 파트의 헤더만 포함합니다.

대리 소비자는 MyDelegator 속성을 사용하여 이 소비자와 그 속성에 액세스할 수 있지만, 그래야 할 경우는 매우 드뭅니다.

생성

설명

consumer = MultipartConsumer(types,consumer)는 지정된 types를 처리하는 MultipartConsumer를 이에 대응하는 consumer를 사용하여 생성합니다. types1,consumer1,...,typesN,consumerN과 같이 여러 개의 인수 쌍을 임의의 순서로 지정할 수 있습니다. MATLAB®은 표시된 순서대로 types를 검색하여 일치하는 첫 번째 값을 사용합니다. 지정된 유형에 일치하는 값이 없으면 MATLAB은 해당 유형의 디폴트 소비자 세트를 사용합니다.

consumer = MultipartConsumer(puthandle)은 ContentConsumer의 putData 메서드 호출 시마다 puthandle이 지정하는 함수를 호출하는 ContentConsumer를 생성합니다.

입력 인수

모두 확장

콘텐츠 유형으로, string형 배열, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. types"type/subtype" 구문을 사용하여 콘텐츠 유형을 지정합니다. 자세한 내용은 matlab.net.http.io.GenericConsumer를 참조하십시오.

콘텐츠 소비자로, 지정된 유형을 처리할 수 있는 matlab.net.http.io.ContentConsumer 객체로 지정되거나 이러한 유형을 처리할 수 있는 ContentConsumer를 반환하는 함수의 핸들로 지정됩니다.

다음과 같은 ContentConsumer.putData 구문을 갖는 putData 함수의 핸들입니다.

[length,stop] = putData(data)

여기서 datauint8형 배열이고 length는 이 배열의 길이입니다.

서버로부터 반환되는 데이터의 유형을 알고 있는 경우, 서버로부터 수신되는 모든 입력을 함수 하나로 처리하려면 이 구문을 사용하십시오. 이 함수에는 ResponseMessage나 이 소비자에 대한 다른 정보에 대한 액세스 권한이 없습니다.

속성

모두 확장

퍼블릭 속성

multipart 메시지에서 첫 번째 경계 구분 기호(있는 경우) 전까지의 파트로, uint8로 지정됩니다. 소비자는 대리자의 start 메서드를 호출하기 전에 먼저 Preamble 속성을 설정합니다. 한 번 설정된 Preamble 값은 변경되지 않습니다.

특성:

GetAccess
public
SetAccess
private

multipart 메시지에서 마지막 경계 구분 기호(있는 경우) 이후의 파트로, uint8로 지정됩니다. 소비자는 메시지가 끝나면 대리자에 대한 모든 호출을 완료한 뒤에 Epilogue를 설정합니다. 메시지가 끝나기 전에 대리자가 전송을 종료하는 경우에는 설정되지 않습니다. 전송이 완료된 후, 예를 들어 RequestMessage.send가 반환된 후 이 속성을 검토할 수 있습니다.

특성:

GetAccess
public
SetAccess
private

제안 버퍼 크기로, uint64로 지정됩니다. MATLAB은 AllocationLengthputData로 전달된 데이터의 예상 버퍼 크기로 설정합니다. 실제 크기는 이보다 작거나 클 수 있습니다. 성능을 개선하려면 소비자는 이 값을 사용하여 데이터를 처리할 공간을 사전할당할 수 있습니다.

MATLAB은 서브클래스의 편의를 위해 start 메서드를 호출하기 전에 먼저 이 속성을 설정합니다.

특성:

GetAccess
public
SetAccess
public

페이로드의 예상 길이로, uint64로 지정됩니다. 이 속성은 일반적으로 Header 속성의 matlab.net.http.field.ContentLengthFieldValue 속성입니다.

ContentLength가 비어 있다면 길이를 알 수 없다는 의미입니다. putData(uint8.empty)가 호출되면 페이로드가 종료됩니다.

MATLAB은 데이터의 길이를 알면 좋은 서브클래스에 대해 편의를 위해 initialize를 호출하기 전에 먼저 이 속성을 설정합니다.

ContentConsumer가 최상위 소비자의 대리자인 경우, ContentLength의 값이 최상위 소비자의 ContentLength 값과 다를 수 있습니다.

예: someData의 type이 uint8numel(someData)

특성:

GetAccess
public
SetAccess
public

페이로드의 미디어 형식으로, matlab.net.http.MediaType 객체로 지정됩니다. 이 속성은 일반적으로 Header 속성의 matlab.net.http.field.ContentTypeFieldValue 속성입니다. ContentType 속성이 비어 있으면 ContentTypeField가 비어 있거나 존재하지 않는 것입니다.

MATLAB은 MediaType을 검토하고자 하는 서브클래스에 대해 편의를 위해 initialize를 호출하기 전에 먼저 이 속성을 설정합니다. 서브클래스가 데이터를 보고 데이터가 다른 MediaType이라고 판단하는 경우에는 이 속성을 설정할 수 있습니다.

전송이 끝나면 MATLAB이 이 값을 Response.Body.ContentType 속성에 복사합니다.

예: 'application/octet-stream'

특성:

GetAccess
public
SetAccess
public

현재 처리되고 있는 페이로드의 헤더로, matlab.net.http.HeaderField 객체로 지정됩니다.

소비자는 전송받고 있는 페이로드를 처리할 방법을 결정할 때 이 헤더를 사용합니다. 최상위 소비자의 경우, 이 값은 Response.Header와 동일합니다. 대리자의 경우에는 이 값이 다를 수 있습니다. 예를 들어, MultipartConsumer가 처리하는 multipart 메시지에서 이 값은 이 대리자가 처리하는 파트의 헤더가 됩니다. 대리자는 여전히 원본 메시지의 헤더를 Response.Header에서 검토할 수 있습니다.

MATLAB은 서브클래스의 편의를 위해 initialize를 호출하기 전에 먼저 이 속성을 설정합니다.

특성:

GetAccess
public
SetAccess
public

전송된 완전한 RequestMessage로, matlab.net.http.RequestMessage 객체로 지정됩니다. 모든 리디렉션이 끝난 뒤의 최종 RequestMessage이자 send 메서드의 completedrequest 반환 값입니다.

MATLAB은 서브클래스의 편의를 위해 initialize를 호출하기 전에 먼저 이 속성을 설정합니다.

특성:

GetAccess
public
SetAccess
public

처리되고 있는 ResponseMessage로, matlab.net.http.ResponseMessage 객체로 지정됩니다.

MATLAB은 initialize를 호출하기 전에 먼저 Response 속성을 설정합니다. 이 값은 헤더 수신 이후이고 페이로드 수신 이전의 ResponseMessage입니다. 응답 메시지의 처리가 시작될 때(또는 multipart 메시지 중 한 파트의 시작 부분에서), ResponseMesssage.Body 속성은 Data 속성과 Payload 속성이 비어 있는 MessageBody 객체입니다. 소비자는 수신된 데이터를 저장하기 위해 데이터 전송 중에 Response 속성과 MessageBody.Data 속성을 수정할 수 있습니다. 일반적으로 데이터를 처리하고 저장하는 소비자는 Response.Body.Data를 처리된 페이로드로 설정하지만, 이는 필수적인 것은 아닙니다. 전송이 완료되면 MATLAB은 이 Responsesend의 호출자에게 반환합니다. HeaderStatusLine 같은 다른 Response 속성을 변경하면 send의 호출자에게 반환되기 때문에 소비자는 이러한 속성을 수정하면 안 됩니다.

Response.Body.Payload 속성은 전송 중에 비어 있으며, 소비자가 이를 수정하려고 시도하면 안 됩니다. HTTPOptions.SavePayload 속성이 설정된 경우, MATLAB은 메시지 또는 파트의 전송이 종료되었을 때(putData(uint8.empty)에 대한 호출 후) 또는 예외가 발생했을 때 Payload를 수신된 페이로드로 설정합니다.

메시지 처리 중에 소비자에 예외가 발생한 경우, MATLAB은 HTTPException 객체를 발생시킵니다. History 속성은 이 Response 값을 포함합니다.

소비자가 multipart 메시지의 한 파트를 처리하고 있는 대리자인 경우, Response.Header는 전체 메시지의 헤더를 포함하고, 각 파트의 ContentConsumer가 호출되기 전에 Response.BodyPayload 속성과 Data 속성이 지워집니다. 각 파트가 완료되면 원본 응답의 Body.Data에 들어 있는 ResponseMessage 객체로 구성된 배열의 끝에 이 객체의 Header와 이 속성의 Body를 포함하는 새 ResponseMessage가 추가됩니다. 다음 대리자는 이전 대리자의 MessageBody가 아닌 빈 MessageBody를 포함하는 새 Response를 가지게 됩니다.

특성:

GetAccess
public
SetAccess
public
Dependent
true

처리되고 있는 요청의 대상으로, matlab.net.URI 객체로 지정됩니다. 이 값은 send에 의해 결정된 원본 대상 URI입니다. 리디렉션이 이루어진 뒤의 프록시 URI나 최종 URI가 아닙니다.

MATLAB은 서브클래스의 편의를 위해 initialize를 호출하기 전에 먼저 이 속성을 설정합니다.

특성:

GetAccess
public
SetAccess
public

보호 속성

대리자의 putData 메서드로, 함수 핸들로 지정되거나 CurrentDelegate가 설정되어 있는 경우 []로 지정됩니다.

특성:

GetAccess
protected
SetAccess
protected

함수로, 데이터를 더 추가하기 위해 putData 메서드가 호출하는 함수의 함수 핸들로 지정됩니다. 이 클래스의 putData 메서드는 data 인수에서 수신하는 데이터를 응답 메시지의 기존 데이터에 추가하기 위해 AppendFcn 함수를 호출합니다. 이 함수는 다음과 같은 시그니처를 가져야 합니다.

AppendFcn(consumer,newdata)

여기서 newdataconsumer.Response.Body.Data의 배열에 추가될 데이터입니다. 이 메서드는 Data의 새 길이를 반영하도록 consumer.CurrentLength를 업데이트하는 역할을 담당합니다. newdata가 비어 있다는 것은 스트림이 끝났다는 것을 나타내는데, 이 경우 이 함수는 Response.Body.Data를 최종 값으로 업데이트해야 합니다.

이 속성이 비어 있으면 디폴트 동작은 내부 함수를 사용하여 Datahorzcat 함수를 지원하는 임의 값으로 구성된 배열로 처리합니다. 공간을 사전할당하여 newdata를 효율적으로 추가하며, CurrentLength가 저장되는 데이터의 실제 길이가 되도록 유지합니다. 메시지의 끝에서 Response.Body.DataCurrentLength에 맞게 잘라냅니다.

이 추가하는 절차에 horzcat이 적절하지 않은 경우 서브클래스가 이 속성을 변경할 수 있습니다. 예를 들어, StringConsumer가 string형 스칼라를 빌드하면 horzcat 함수 대신 plus 함수를 사용하여 해당 string형에 추가합니다.

데이터 추가를 위해 ContentConsumer.putData를 호출하지 않거나 데이터를 추가할 때 horzcat의 동작으로 충족되는 서브클래스는 이 속성을 무시할 수 있습니다.

예: @customAppend가 소비자에 의해 정의되는 @customAppend

특성:

GetAccess
protected
SetAccess
protected

이 소비자가 위임하는 대상 ContentConsumer로, matlab.net.http.io.ContentConsumer 객체로 지정됩니다. 호출하는 소비자(위임 주체)의 delegateTo 메서드가 CurrentDelegate 속성을 설정합니다. 현재 위임이 없는 경우, 이 값은 []이 됩니다.

MATLAB은 initialize를 호출하기 전에 CurrentDelegate[]로 설정합니다.

특성:

GetAccess
protected
SetAccess
protected

현재 Response.Body.Data 속성에 있는 데이터의 길이로, uint64로 지정됩니다.

이 속성은 Response.Body.Data가 현재 저장된 실제 데이터보다 큰 크기로 사전할당된 경우 저장된 데이터의 길이를 나타내기 위해 사용됩니다. 이 속성이 비어 있으면 Response.Body.Data 전체에 저장된 데이터를 포함하고 있거나 특정 ContentConsumer 서브클래스가 데이터를 Response.Body.Data에 저장하는 것 이외의 방법으로 데이터를 삭제하고 있음을 의미합니다.

이 속성은 AppendFcn 속성이 비어 있으면 이 기본 클래스의 putData 메서드에 의해 사용되고 설정됩니다. 이는 putData를 호출하며, 이미 저장되어 있는 데이터 및/또는 Response.Body.Data에서 결과를 유지하는 AppendFcn의 구현을 검토하는 서브클래스를 위한 것입니다.

putData를 사용하는 서브클래스는 이 속성을 사용하여 데이터가 저장되어 있는 버퍼의 위치를 재설정할 수도 있습니다. 예를 들어, 디폴트 AppendFcn 함수가 사용된 경우, putData 호출 시마다 Response.Body.Data 전체를 처리하는 서브클래스는 더 이상 원본 데이터가 필요하지 않으므로, 다음번 putData 호출 시 버퍼를 새 데이터로 덮어쓰도록 CurrentLength 속성을 1로 재설정할 수 있습니다. 버퍼에서 새 데이터 끝을 지나 존재하는 요소는 지울 필요가 없습니다.

putData를 호출하지 않는 서브클래스는 이 속성을 사용하여 자체 데이터를 추적하거나 설정하지 않은 상태로(빈 상태로) 둘 수 있습니다. MATLAB은 여기에 설정될 수 있는 값에 제약을 두지 않으며, 디폴트 AppendFcn이 다음 데이터 버퍼를 저장할 장소와 메시지 끝에서 잘라낼 데이터의 부분을 결정하는 용도 이외로는 이 속성을 사용하지 않습니다. putData(uint8.empty)를 마지막으로 호출하기 전에 이 속성을 빈 값으로 설정하면 데이터 잘림을 방지할 수 있습니다.

MATLAB은 매번 initialize를 호출하기 전에 이 속성을 빈 값으로 설정합니다.

특성:

GetAccess
protected
SetAccess
protected

이 소비자에게 위임된 ContentConsumer로, matlab.net.http.io.ContentConsumer 객체로 지정됩니다. 이 소비자가 다른 소비자(예: GenericConsumer 또는 MultipartConsumer)가 호출한 대리자인 경우, 이 소비자는 호출하는 소비자가 됩니다. send 호출 시 지정된 최상위 소비자에서는 빈 값입니다.

예를 들어 자신에게 어떤 소비자가 위임되었는지 확인하기 위한 목적으로, 대리자는 이 속성을 사용하여 위임 주체의 속성에 액세스할 수 있습니다.

특성:

GetAccess
protected
SetAccess
protected

메서드

모두 확장

세부 정보

모두 확장

버전 내역

R2018a에 개발됨