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
方法的第三个参量),还是 Multipart 消息中的一部分(在 MultipartConsumer
构造函数调用中指定为“代理”),它通常都可以正常工作。MultipartConsumer
使得每个代理好像在处理整个响应消息,但实际上代理只是将结果汇集成一个 ResponseMessages
数组,存储在返回的 response.Body.Data
属性中。
下面介绍 MultipartConsumer
的行为:
此 MultipartConsumer
每次从服务器收到消息的一个完整部分时,它会解析该部分中的任何标头,然后根据该部分的 Content-Type 字段调用合适的代理使用程序。如果该部分没有 Content-Type 字段,则假定类型为 text/plain
。如果没有能够处理该类型的代理,它将根据 Content-Type 对该部分使用默认处理,如 GenericConsumer
中所述。
MultipartConsumer
在收到一个完整的部分之前不会调用代理。MultipartConsumer
先缓冲该部分的数据,在完全收到该部分后,将 ContentConsumer
的所有可见属性从此使用程序复制给代理,清空代理的 Response.Body
,将代理的 Header
设置为该部分的标头,然后调用代理的 initialize
和 start
方法,接着对代理中包含该部分有效负载的 putData
方法进行一次或多次调用,最后调用 putData(uint8.empty)
来表示数据结束。如果代理的 initialize
方法返回 false
,指明它不想处理该部分,则使用适合该部分的 Content-Type 的默认行为来处理该部分的有效负载,如 GenericConsumer
中所述。
如果代理的 start
方法返回 []
,指明缓冲区大小无上限,MultipartConsumer
将只会对提供该部分全部有效负载的 putData
进行一次调用,然后调用表示数据结束的方法。否则,它会对 putData
进行足够多次的调用,以缓冲区大小为单位提供整个有效负载。
如果代理的 putData
方法将 STOP
返回值设置为 true
,指明它不想再接收任何数据,MultipartConsumer
将关闭连接以结束传输,就像消息已经结束一样。代理通过这种方式控制是否处理原始消息的剩余部分。如果 putData
返回的 SIZE
为 []
,消息也会结束,但会向 RequestMessage.send
的调用方抛出异常。
如果某一部分的使用程序被指定为函数句柄而不是 ContentConsumer
实例,则该函数只在第一次需要该使用程序时调用,之后将使用该使用程序实例来处理同一个响应消息中任何适用的部分。对于由函数句柄处理的部分,Response.Body.Data
中对应的 ResponseMessage
只包含该部分的标头,因为该函数无权访问 ResponseMessage
主体。
代理使用程序可以通过 MyDelegator
属性访问此使用程序及其属性,但很少需要这样做。
创建对象
描述
输入参量
属性
方法
详细信息
版本历史记录
在 R2018a 中推出