主题
网关接入协议 TopLink-V3
平台支持非纳管型网关的接入,如果用户有自己的物联网网关,可以参考本协议开发非纳管型网关,实现设备数据接入。
一、TopLink V3 协议介绍
TopLink 协议是针对物联网开发领域设计的一种数据交换规范,数据格式是 JSON,用于设备端和物联网平台的双向通信,更便捷地实现和规范了设备端和物联网平台之间的业务数据交互。 本协议基于 MQTT 进行了封装,用户可以参照本协议开发自己的物联网网关,实现与 TopStack 物联网平台的数据接入。
二、网关状态
用于平台获取网关在线离线状态。平台侧为订阅方,网关侧为发送方。
网关上线
网关在连接到 Broker 时需要主动向平台侧发送一个在线信息:
- 主题格式:
api/v3/event/gw_state/[网关标识]
- QoS: 1
- Retain: true
- 消息体:
{ "gatewayID": "网关标识", "state": 1 }
网关下线
当网关断开时向平台侧推送离线消息:
- 主题:
api/v3/event/gw_state/[网关标识]
- QoS:1
- retain: true
- 消息体:
{ "gatewayID": "网关标识", "state": 0 }
当网关异常断开时(比如强制断电),需要借助 MQTT 的遗愿机制发送网关离线消息。当网关侧正常断开链接时,由于 Client 正常断开链接时不会触发遗愿机制,需要向遗愿主题主动发送离线消息,通知平台网关离线。
MQTT 遗愿机制介绍:
LWT 全称为 Last Will and Testament,当 MQTT Client 连接到 Broker 时可以设置一个遗愿,包括遗愿主题、遗愿 QoS、遗愿消息等。 顾名思义,当 MQTT Broker 检测到 Client 非正常地断开连接的时候,就会向遗愿主题里面发布一条消息。 Broker 在以下情况下认为 Client 是非正常断开连接的:
- Broker 检测到底层的 I/O 异常;
- Client 未能在 Keep Alive 的间隔内和 Broker 之间有消息交互;
- Client 在关闭底层 TCP 连接前没有发送 DISCONNECT 数据包;
- Broker 因为协议错误关闭和 Client 的连接,比如 Client 发送了一个格式错误的 MQTT 数据包。
三、数据上报
实时数据上报
用于边缘侧(网关)向云平台侧上报实时数据。平台侧为订阅方,边缘侧(网关)为发送方。
- 主题:
api/v3/event/real/[网关标识]
- 主题(snappy 压缩):
api/v3/event/real_snappy/[网关标识]
- 主题(gzip 压缩):
api/v3/event/real_gz/[网关标识]
- 消息体: 格式为 JSON 数组,每次发送多个测点的数据。
timestamp
字段可以省略。
IMPORTANT
如果采用的是压缩传输,需要将 json 内容压缩为二进制数据后再进行传输。
示例:
json
[
{
"deviceID" : "device-001",
"pointID" : "Ia",
"value" : 25.05,
"timestamp" : 1523000206274,
"quality" : 0
},
{
"deviceID" : "device-001",
"pointID" : "DI1",
"value" : false,
"timestamp" : 1523000206274,
"quality" : 0
}
]
字段说明:
字段 | 类型 | 必选 | 描述 |
---|---|---|---|
deviceID | string | 是 | 设备标识 |
pointID | string | 是 | 点位标识 |
value | string|number|boolean | 是 | 点位值 |
quality | number | 否 | 数据质量 |
timestamp | string|number | 是 | 时间戳:string 类型采用 ISO 8601格式: YYYY-MM-DDTHH:MM:SSZ,number 类型采用毫秒数时间戳 |
NOTE
时间戳字段支持两种格式类型:
- string 类型采用 ISO 8601格式: YYYY-MM-DDTHH:MM:SSZ
- number 类型采用毫秒数时间戳
历史数据上报
用于边缘侧(网关)向云平台侧上报历史数据。平台侧为订阅方,边缘侧(网关)侧为发送方。主要用于断点续传场景,如果网关未连接到MQTT服务器,可以将数据保存为历史数据,恢复通讯后,将未上报的历史数据上传到平台侧。
- 消息主题:
api/v3/event/his/[网关标识]
- 消息主题(snappy压缩):
api/v3/event/his_snappy/[网关标识]
- 消息主题(gzip压缩):
api/v3/event/his_gz/[网关标识]
- 消息体: JSON 数组,格式与实时数据相同。
IMPORTANT
如果采用的是压缩传输,需要将 json 内容压缩为二进制数据后再进行传输。
串行数据上报
串行数据用于记录某时间段内一系列连续的数据,比如振动数据,谐波数据,水文监测中的【1小时内每5分钟雨量】等。
串行数据上报用于边缘侧(网关)向云平台侧上报串行数据。平台侧为订阅方,边缘侧(网关)侧为发送方。
- 消息主题:
api/v3/event/serial/[网关标识]
- 消息体: JSON 数组,每个数组元素代表一个测点的连续数据,每条消息可以传输多个测点的串行数据。
IMPORTANT
串行数据中的最后一项会被当作该测点的最新值。
示例:
json
[
{
"deviceID" : "station01",
"pointID" : "DRP",
"items": [
{
"value" : 25.05,
"timestamp" : 1523000206274
},
...
]
},
...
]
字段说明:
字段 | 类型 | 必选 | 描述 |
---|---|---|---|
deviceID | string | 是 | 设备标识 |
pointID | string | 是 | 点位标识 |
items | Array | 是 | 数据项数组 |
items.value | string|number|boolean | 是 | 点位值 |
items.timestamp | string|number | 是 | 时间戳:string 类型采用 ISO 8601格式: YYYY-MM-DDTHH:MM:SSZ,number 类型采用毫秒数时间戳 |
设备状态上报
当设备状态发生变化时,边缘侧(网关)向平台侧推送设备状态信息。平台侧为订阅方,边缘侧(网关)为发送方。
- 消息主题格式:api/v3/event/dev_state/[网关标识]/[设备标识]
- Retain: true
- Qos: 1
消息格式为JSON对象:
json
{
"deviceID" : "device-001",
"state" : 1,
"timestamp" : "2018-04-06T15:36:46.2744203+08:00"
}
timestamp 字段可以省略,state 表示设备通讯状态,0 表示离线,1 表示在线。
通道状态上报
当通道状态发生变化时,边缘侧(网关)向平台侧推送通道状态信息,每次发送多个通道的状态。 消息主题格式:api/v3/event/chan_state/[网关标识]/[通道标识] Retain: true Qos: 1 消息格式为JSON对象,timestamp字段可以省略。:
json
{
"gatewayID" : "device-001",
"channelID" : "",
"running" : true,
"connected" : false,
"timestamp" : "2018-04-06T15:36:46.2744203+08:00"
}
四、控制指令下发
单点写入
单点写入用于实现单个数据点的远程控制或远程调参操作。平台侧发出请求命令,网关侧执行后返回响应结果。 数据下行。
- 请求主题:
api/v3/service/set_value/[网关标识]
,Qos: 0 - 响应主题:
api/v3/service/ack/[网关标识]
,Qos:1
写入请求消息格式如下:
json
{
"id": "<uuid>", // 控制命令ID
"gatewayID": "xxx",
"deviceID": "xxx",
"pointID" : "DO1",
"value": "false"
}
字段说明:
字段 | 类型 | 描述 |
---|---|---|
id | string | 消息ID全局唯一,用于网关侧回复响应 |
gatewayID | string | 网关标识 |
deviceID | string | 设备标识 |
pointID | string | 点位标识 |
value | string | 写入值 |
网关响应消息格式如下:
json
{
"id": "<uuid>", // 控制命令ID,平台侧发送响应
"errCode": 0, // 错误码,0 表示成功
"errMsg" : "", // 错误信息
}
字段说明:
字段 | 类型 | 描述 |
---|---|---|
id | string | 收到的请求命令中的ID保持一致 |
errCode | int | 错误码0 表示成功 |
errMsg | string | 错误消息,可省略 |
多点写入
多采集点写入用于实现多个测点的批量远程控制操作。可以一次性下发多个设备的控制命令。 数据下行。
- 请求主题:
api/v3/service/batch_set_value/[网关标识]
,Qos 0 - 响应主题:
api/v3/service/ack/[网关标识]
,Qos:1
平台请求消息格式如下:
json
{
"id": "<uuid>", // 控制命令ID
"gatewayID": "xxx",
"devices": { // 所有设备的控制命令
"device-001": { // 设备序列号:device-001
"DO1": "true", // 开关量 DO1 控制输出
"DO2": "true",
"DO3": "false",
"AI1": "100"
},
"device-002": {
"DO1": "true",
"DO2": "true",
"DO3": "false",
"AI1": "200"
}
}
}
字段说明:
字段 | 类型 | 描述 |
---|---|---|
id | string | 消息ID全局唯一 |
gatewayID | string | 网关标识 |
devices | object | 需要写入的设备 |
devices[key] | string | 设备标识 |
devices[value] | object | 需要写入的设备数据 |
devices[value][key] | string | 点位标识 |
devices[value][value] | string | 写入值 |
网关响应消息格式如下:
json
{
"id": "<uuid>",
"errCode": 0,
"errMsg" : ""
}
字段说明:
字段 | 类型 | 描述 |
---|---|---|
id | string | 收到的请求命令中的ID保持一致 |
errCode | int | 错误码0 表示成功 |
errMsg | string | 错误消息,可省略 |
五、数据召唤
实时数据召唤
平台侧发出“实时数据召唤指令”,网关接收到“数据召唤指令后”主动上报实时数据。
请求主题: api/v3/service/call_real/[网关标识]
,Qos 1;
请求消息格式:
{
"timestamp" : "2018-04-06T15:36:46.2744203+08:00"
}
历史数据召唤
平台侧发出“历史数据召唤指令”,网关接收到“数据召唤指令后”主动上报指定时间范围内的历史数据。
请求主题:
api/v3/service/call_his/[网关标识],Qos 1;
请求消息格式示例:
json
{
"since": 1571724098000,
"until": 1571764283000
}
字段说明:
字段 | 类型 | 描述 |
---|---|---|
since | int | 起始时间,毫秒时间戳 |
until | int | 结束时间,毫秒时间戳 |
六、时间同步
物联网平台提供NTP服务,解决嵌入式设备资源受限,系统不包含NTP服务,端上没有精确时间戳的问题。 物联网平台借鉴NTP协议原理,将平台侧作为NTP服务器。设备端发送一个特定Topic给云端,payload中带上发送时间。云端回复时在payload中加上云端的接收时间和发送时间。设备端收到回复后,再结合自己本地当前时间,得出一共4个时间。一起计算出设备端与云端的时间差,从而得出端上当前的精确时间。
使用说明
请求主题:api/v3/service/ntp/request/[网关标识] 响应主题:api/v3/service/ntp/response/[网关标识]
NTP 服务使用流程:
- 网关侧订阅:
api/v3/service/ntp/response/[网关标识]
- 网关侧向
api/v3/service/ntp/request/[网关标识]
发送一条QoS=0的消息,携带设备当前的时间戳,单位为毫秒。示例如下:
json
{"deviceSendTime":1571724098000}
说明 1.时间戳数字的格式,支持Long和String。默认为Long类型。 2.NTP服务目前仅支持QoS=0的消息。
- 网关侧通过
api/v3/service/ntp/response/[网关标识]
,收到物联网平台回复的消息,包含以下信息:
json
{
"deviceSendTime":1571724098000,
"serverRecvTime":1571724098110,
"serverSendTime":1571724098115
}
- 设备端计算出服务端当前精确的Unix时间。设备端收到服务端的时间记为${deviceRecvTime},则设备上的精确时间为:(${serverRecvTime}+${serverSendTime}+${deviceRecvTime}-${deviceSendTime})/2。
使用示例
说明 设备端和服务端发送的时间戳数据的类型相同。例如,设备端传的时间戳是String类型,服务端返回的时间戳也是String类型。
例如,设备上时间是1571724098000毫秒,服务端时间是1571724098100毫秒,链路延时是10毫秒,服务端从接收到发送间隔为5毫秒。
操作 | 设备端时间(毫秒) | 服务端时间(毫秒) |
---|---|---|
设备端发送 | 1571724098000(deviceSendTime) | 1571724098100 |
服务端接收 | 1571724098010 | 1571724098110(serverRecvTime) |
服务端发送 | 1571724098015 | 1571724098115(serverSendTime) |
设备端接收 | 1571724098025(deviceRecvTime) | 1571724098125 |
则设备端计算出的当前准确时间为(1571724098110+1571724098115+1571724098025-1571724098000)毫秒÷2=1571724098125毫秒
。 如果直接采用物联网平台返回的时间戳,只能得到时间1571724098115毫秒,与服务端上的时间会有10毫秒的链路延时误差。
七、OTA 升级
平台提供OTA升级与管理服务。本章节介绍OTA升级消息的Topic和数据格式,包括设备上报OTA模块版本、平台推送升级包信息、设备上报升级进度和设备请求获取最新升级包信息。
设备上报OTA模块版本
数据上行。
Topic:api/v3/event/ota/info/${gatewayId}
。
设备通过这个Topic上报当前的OTA模块版本信息。
IMPORTANT
本Topic只支持单个模块的版本上报。如果设备需要上报多个模块的版本,请分多次上报,每次上报一个模块的版本信息。
请求数据格式:
json
{
"id": "123",
"params": {
"version": "1.0.1",
"module": "MCU",
"protocol":"MQTT"
}
}
参数说明:
参数 | 类型 | 说明 |
---|---|---|
id | String | 消息ID号。UUID,且每个消息ID在当前设备中具有唯一性。 |
version | String | OTA模块版本。 |
module | String | OTA模块名。说明上报默认(default)模块的版本号时,可以不上报module参数。设备的默认(default)模块的版本号代表整个设备的固件版本号。 |
protocol | String | 设备支持的升级包下载协议。HTTP 或 MQTT,空表示 HTTP。 |
平台推送OTA升级包信息
数据下行。
Topic:api/v3/service/ota/upgrade/request/${gatewayId}
。
平台通过该Topic推送OTA升级包信息, 设备订阅该Topic可以获得升级包信息。
单个文件的OTA升级包信息:
升级包下载协议为HTTP:
swift{ "code": "", "data": { "size": 432945, "version": "2.0.0", "isDiff": 1, "url": "/iot/api/v1/ota/package/file/download/***XJEH0qAKU?filename=", "sign": "93230c3bde425a9d***", "signMethod": "MD5", "module": "MCU" }, "id": "", "message": "success" }
升级包下载协议为MQTT:
css{ "code":"", "data":{ "size": 432945, "version": "2.0.0", "isDiff": true, "signMethod": "MD5", "protocol": "MQTT", "streamID": "", "streamFile": "", "sign":"93230c3bde425***", "module":"MCU" }, "id": "", "message":"success" }
多个文件的OTA升级包仅支持HTTP下载协议,信息如下:
swift{ "code": "", "data": { "version": "2.0.0", "isDiff": 1, "signMethod": "MD5", "files":[ { "size":432944, "fileName":"file1-name", "url": "/iot/api/v1/ota/package/file/download/***XJEH0qAKU?filename=", "sign":"93230c3bde425a9d****" } ], "module": "MCU" }, "id": "", "message": "success" }
参数说明:
参数 | 类型 | 说明 |
---|---|---|
id | String | 消息ID号。每个消息ID在当前设备中具有唯一性。 |
message | String | 结果信息。 |
code | String | 状态码,空表示成功。 |
version | String | 设备升级包的版本信息。 |
size | Long | 升级包文件大小,单位:字节。OTA升级包中仅有一个升级包文件时,包含该参数。 |
url | String | 升级包在对象存储(OSS)上的存储地址。OTA升级包中仅有一个升级包文件,且下载协议为HTTPS时,包含该参数。 |
protocol | String | 升级包下载协议。仅升级包下载协议为MQTT时,包含该参数。 |
streamID | Long | 通过MQTT协议下载OTA升级包时的唯一标识。 |
streamFile | String | 单个升级包文件的名称。 |
isDiff | Boolean | 仅当升级包类型为差分时,消息包含此参数。取值为 true,表示仅包含新版本升级包与之前版本的差异部分,需要设备进行差分还原。 |
sign | String | OTA升级包文件的签名。OTA升级包中仅有一个升级包文件时,包含该参数。 |
signMethod | String | 签名方法。取值:SHA256``MD5 对于Android差分升级包类型,仅支持MD5签名方法。 |
module | String | 升级包所属的模块名。说明模块名为default时,物联网平台不下发module参数。 |
files | Array | 多个升级包文件的信息列表。OTA升级包中有多个文件时,包含该参数。 |
files.size | Long | 升级包文件大小。 |
files.fileName | String | 升级包文件的名称。 |
files.url | String | 升级包文件下载地址。 |
files.sign | String | 升级包文件签名。 |
设备上报升级进度
数据上行。
Topic:api/v3/event/ota/progress/${gatewayId}
。
OTA升级过程中,设备可以通过这个Topic上报OTA升级的进度百分比。
说明
建议设置设备端上报进度频率为3秒内最多一次。若设备上报进度频繁,在物联网平台控制台的OTA升级包详情的批次详情中,可能无法查看到上报的全部进度。
请求数据格式:
json
{
"id": "123",
"params": {
"step": "-1",
"desc": "OTA升级失败,请求不到升级包信息。",
"module": "MCU"
}
}
参数说明:
参数 | 类型 | 说明 |
---|---|---|
id | String | 消息ID号。String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。 |
step | String | OTA升级进度。取值范围:1~100的整数:升级进度百分比。-1 :升级失败。-2 :下载失败。-3 :校验失败。-4 :烧写失败。设备上报的进度值及其描述信息,可根据设备实际升级场景在设备端配置。 |
desc | String | 当前步骤的描述信息,长度不超过128个字符。如果发生异常,此字段可承载错误信息。 |
module | String | 升级包所属的模块名。模块的更多信息,请参见控制台手册中的OAT升级。说明上报默认(default)模块的OTA升级进度时,可以不上报module参数。 |
设备请求OTA升级包信息
数据上行。
请求Topic:api/v3/service/ota/firmware/request/${gatewayId}
。
响应Topic:api/v3/service/ota/firmware/response/${gatewayId}
。
请求数据格式:
json
{
"id": "123",
"params": {
"version": "1.0.1",
"module": "MCU",
"protocol":"MQTT"
}
}
参数说明:
参数 | 类型 | 说明 |
---|---|---|
id | String | 消息ID号。String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。 |
version | String | OTA模块版本。 |
module | String | 升级包所属的模块名。说明不指定则表示请求默认(default)模块的升级包信息。 |
protocol | String | 设备支持的升级包下载协议。HTTP 或 MQTT,空表示 HTTP。 |
物联网平台收到设备请求后,响应请求,下发升级包信息。返回数据格式如下:
单个文件的OTA升级包信息:
升级包下载协议为HTTP:
swift{ "code": "", "data": { "size": 432945, "version": "2.0.0", "isDiff": 1, "url": "/iot/api/v1/ota/package/file/download/***XJEH0qAKU?filename=", "sign": "93230c3bde425a9d***", "signMethod": "MD5", "module": "MCU" }, "id": "", "message": "success" }
升级包下载协议为MQTT:
css{ "code":"", "data":{ "size": 432945, "version": "2.0.0", "isDiff": true, "signMethod": "MD5", "protocol": "MQTT", "streamID": "", "streamFile": "", "sign":"93230c3bde425***", "module":"MCU" }, "id": "", "message":"success" }
多个文件的OTA升级包仅支持HTTP下载协议,信息如下:
swift{ "code": "", "data": { "version": "2.0.0", "isDiff": 1, "signMethod": "MD5", "files":[ { "size":432944, "fileName":"file1-name", "url": "/iot/api/v1/ota/package/file/download/***XJEH0qAKU?filename=", "sign":"93230c3bde425a9d****" } ], "module": "MCU" }, "id": "", "message": "success" }
参数说明:
参数 | 类型 | 说明 |
---|---|---|
id | String | 消息ID号。每个消息ID在当前设备中具有唯一性。 |
message | String | 结果信息。 |
code | String | 状态码,空表示成功。 |
version | String | 设备升级包的版本信息。 |
size | Long | 升级包文件大小,单位:字节。OTA升级包中仅有一个升级包文件时,包含该参数。 |
url | String | 升级包的下载地址。OTA升级包中仅有一个升级包文件,且下载协议为 HTTPS 时,包含该参数。 |
protocol | String | 升级包下载协议。仅升级包下载协议为MQTT时,包含该参数。 |
streamID | Long | 通过MQTT协议下载OTA升级包时的唯一标识。 |
streamFile | String | 单个升级包文件的名称。 |
isDiff | Boolean | 仅当升级包类型为差分时,消息包含此参数。取值为 true,表示仅包含新版本升级包与之前版本的差异部分,需要设备进行差分还原。 |
sign | String | OTA升级包文件的签名。OTA升级包中仅有一个升级包文件时,包含该参数。 |
signMethod | String | 签名方法。取值:SHA256 , MD5 。 |
module | String | 升级包所属的模块名。说明模块名为default时,物联网平台不下发module参数。 |
files | Array | 多个升级包文件的信息列表。OTA升级包中有多个文件时,包含该参数。 |
files.size | Long | 升级包文件大小。 |
files.fileName | String | 升级包文件的名称。 |
files.url | String | 升级包文件下载地址。 |
files.sign | String | 升级包文件签名。 |
无升级包信息下发。返回数据格式如下:
json{ "id": "123", "code": "", "data": { } }
设备请求下载文件分片
升级包下载协议为MQTT时,设备端获取OTA升级包信息后,可通过以下Topic分片下载OTA升级包文件。
重要
设备端通过MQTT协议下载的单个文件大小不能超过16 MB。
- 请求Topic:
api/v3/service/ota/file_download/request/${gatewayId}
- 响应Topic:
api/v3/service/ota/file_download/response/${gatewayId}
请求数据格式:
json
{
"id": "123456",
"params": {
"product":"升级包对应的产品标识",
"fileInfo":{
"streamID": "",
"fileId":1
},
"fileBlock":{
"size":256,
"offset":2
}
}
}
参数说明:
参数 | 类型 | 说明 |
---|---|---|
id | String | 消息ID号。此处消息ID返回的是设备请求消息中的ID。 |
params | Object | 请求参数。 |
product | String | 升级包对应的产品标识。 |
fileToken | String | 文件的唯一标识Token,非必填参数。支持数字、英文字母、下划线(_)和英文句号(.),不超过16个字符。使用说明:若传入该参数,物联网平台响应设备请求时,会返回该参数,便于您在设备端多文件下载场景下,从响应消息中确认下载的对应文件。若确认设备端在下载文件的请求和响应周期内,不需要对其他文件发起下载请求,可不设置该参数。 |
fileInfo | Object | OTA升级包文件信息。 |
streamID | String | 通过MQTT协议下载OTA升级包时的唯一标识。 |
file | String | 单个升级包文件名。 |
fileBlock | Object | 文件分片信息。 |
size | Integer | 请求下载的文件分片大小,单位字节,取值范围为256~131072。若为最后一个文件分片,取值范围为1~131072。 |
offset | Integer | 文件分片对应字节的起始地址。取值范围为0~16777216。 |
响应数据格式:
- 结构如下图:
结构项 | 说明 |
---|---|
JSON Bytes Length | 表示响应数据中JSON字符串对应的字节数组长度,必须占位2个字节,高位字节在前,低位字节在后。例如,响应的JSON字符串使用UTF-8编码转码成字节数组的长度为十进制的87,对应十六进制57,则高位字节为0x00,低位字节为0x57。 |
JSON String Bytes | 表示响应数据中JSON字符串对应的字节数组,编码格式为UTF-8。具体内容,请参见下文的“响应的JSON数据格式”。 |
File Block Bytes | 表示当前文件分片的字节数组,字节顺序按照相对于文件头的偏移量从小至大排列。 |
CRC16/IBM | 表示文件分片的校验值,仅支持CRC16/IBM,占位2个字节,高位字节在前,低位字节在后。例如,文件分片的校验值为0x0809,则低位字节为0x09,高位字节为0x08。 |
响应的JSON数据格式:
smalltalk{ "id": "123456", "code": "", "msg":"file size has exceeded the limit 16 MB", "data": { "fileToken":"1bb8***", "fileLength":1238848, "size":1491, "offset":2 } }
参数说明:
参数 | 类型 | 说明 |
---|---|---|
id | String | 消息ID号。每个消息ID在当前设备中具有唯一性。 |
code | String | 状态码,空表示成功。 |
msg | String | 请求失败时,返回的错误信息。 |
data | Object | 返回设备端的数据。 |
fileToken | String | 文件的唯一标识Token。若请求参数传入了fileToken值,则返回该参数。 |
fileLength | Integer | 文件的总大小,单位字节。 |
size | Integer | 当前文件分片的大小,单位字节。 |
offset | Integer | 当前文件分片对应字节的起始地址,与请求数据中的offset值相同。单位字节。 |
附:ISO 8601 日期时间格式
ISO8601是国际标准化组织制定的日期时间表示规范,全称是《数据存储和交换形式·信息交换·日期和时间的表示方法》。日期时间合并表示时,要在时间前面加一大写字母T,如要表示北京时间2004年5月3日下午5点30分8秒,可以写成 2004-05-03T17:30:08+08:00
或20040503T173008+08
。
支持的格式如下:
- 完整日期加上小时与分钟:
YYYY-MM-DDThh:mmTZD
(eg1997-07-16T19:20+01:00
) - 完整日期加上小时分钟和秒数:
YYYY-MM-DDThh:mm:ssTZD
(eg1997-07-16T19:20:30+01:00
) - 完整日期加上小时分钟和秒数以及时进位显示的秒数:
YYYY-MM-DDThh:mm:ss.sTZD
(eg1997-07-16T19:20:30.45+01:00
)
格式符号说明:
- YYYY = 四数字显示 "年"
- MM = 两数字显示 "月"(01=January, etc.)
- DD = 两数字显示一个月份中的 "日" (01 ~ 31)
- hh = 两数字显示 "时" (00 ~ 23) (不允许使用 am/pm)
- mm = 两数字显示 "分" (00 ~ 59)
- ss = 两数字显示 "秒" (00 ~ 59)
- s = 超过一个位数显示以十进制显示秒数 (超过 0, 在有限的数字范围内)
- TZD = 时区指定 (Z or +hh:mm or -hh:mm)
**时区的消减设定: ** UTC (Coordinated Universal Time), 使用 "Z" 显示。 若使用区域时间则可以 UTC 相较."+hh:mm" 表示区域时间的时与分在 UTC 之前,"-hh:mm" 表示区域时间的时与分在 UTC 之后。 例子:1994-11-05T08:15:30-05:00 = November 5, 1994, 8:15:30 am, US Eastern Standard Time = 1994-11-05T13:15:30Z