物聯(lián)網(wǎng)平臺(tái)支持設(shè)備通過(guò)MQTT協(xié)議方式,將文件上傳至用戶自己的OSS空間或阿里云物聯(lián)網(wǎng)平臺(tái)空間進(jìn)行儲(chǔ)存。本文介紹設(shè)備上傳文件流程相關(guān)的Topic和數(shù)據(jù)格式,包括設(shè)備請(qǐng)求上傳文件、設(shè)備上傳文件分片和設(shè)備取消上傳文件。
背景信息
設(shè)備端完成文件上傳能力開(kāi)發(fā)的具體操作,請(qǐng)參見(jiàn)文件上傳(MQTT)。
若選擇將文件上傳至您自己的OSS空間,設(shè)備上傳文件后,您可以在OSS中訪問(wèn)文件。
若將文件上傳至阿里云物聯(lián)網(wǎng)平臺(tái)空間,設(shè)備上傳文件后,您可以在物聯(lián)網(wǎng)平臺(tái)控制臺(tái)查看、下載、刪除文件。具體操作,請(qǐng)參見(jiàn)文件管理。
設(shè)備請(qǐng)求上傳文件
- 請(qǐng)求Topic:
/sys/${productKey}/${deviceName}/thing/file/upload/mqtt/init
。 - 響應(yīng)Topic:
/sys/${productKey}/${deviceName}/thing/file/upload/mqtt/init_reply
。
請(qǐng)求數(shù)據(jù)格式:
{
"id":"123456",
"params":{
"fileName":"abc.bin",
"fileSize":123455,
"conflictStrategy":"overwrite",
"ficMode":"crc64",
"ficValue":"0205d7***",
"initUid":"ab1***34",
"extraParams":{
"ossOwnerType":"device-user",
"serviceId":"device1.bucket",
"fileTag":{
"tagKey1":"tagValu1",
"tagKey2":"tagValue2"
}
}
}
}
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
id | String | 消息ID號(hào)。String類型的數(shù)字,取值范圍0~4294967295,且每個(gè)消息ID在當(dāng)前設(shè)備中具有唯一性。 |
params | Object | 請(qǐng)求業(yè)務(wù)參數(shù)。 |
fileName | String | 設(shè)備上傳文件的名稱。限制如下:
|
fileSize | Long | 上傳文件大小,單位字節(jié)。單個(gè)文件大小不超過(guò)16 MB。 取值為-1時(shí),表示文件大小未知。文件上傳完成時(shí),需在上傳文件分片的消息中,指定參數(shù)isComplete,具體說(shuō)明,請(qǐng)參見(jiàn)設(shè)備上傳文件分片。 |
conflictStrategy | String | 物聯(lián)網(wǎng)平臺(tái)對(duì)設(shè)備上傳同名文件的處理策略。非必填參數(shù),默認(rèn)為overwrite。 使用說(shuō)明:
|
ficMode | String | 文件的完整性校驗(yàn)?zāi)J剑壳翱扇≈?span id="z68uejxpaoma" class="keyword option" data-tag="option" id="option-3jh-36b-39x">crc64。非必傳參數(shù)。
重要 若fileSize值為-1,不支持設(shè)置ficMode和ficValue。 |
ficValue | String | 文件的完整性校驗(yàn)值,是16位的Hex格式編碼的字符串。 非必傳參數(shù)。若傳入,與ficMode同時(shí)傳入。 |
initUid | String | 自定義的設(shè)備請(qǐng)求上傳文件的任務(wù)唯一ID,同一上傳任務(wù)請(qǐng)求必須對(duì)應(yīng)相同的唯一ID。限制如下:
該參數(shù)可選:
|
extraParams | Object | 設(shè)備上傳文件至OSS存儲(chǔ)空間的配置參數(shù)。非必須參數(shù)。 若未指定該參數(shù),表示設(shè)備將文件上傳至物聯(lián)網(wǎng)平臺(tái)的存儲(chǔ)空間中。 |
ossOwnerType | String | 設(shè)備上傳文件的目標(biāo)OSS所有者類型。可取值:
|
serviceId | String | 文件上傳相關(guān)的業(yè)務(wù)ID。該ID需要在物聯(lián)網(wǎng)平臺(tái)控制臺(tái)預(yù)先定義。具體操作,請(qǐng)參見(jiàn)配置設(shè)備文件上傳至Bucket。 僅ossOwnerType為 |
fileTag | Object | 文件保存到OSS存儲(chǔ)空間攜帶的標(biāo)簽,最多包含5個(gè)。標(biāo)簽定義規(guī)則,請(qǐng)參見(jiàn)對(duì)象標(biāo)簽。 標(biāo)簽Key不能以2個(gè)下劃線(_)開(kāi)頭。 僅ossOwnerType為 |
響應(yīng)數(shù)據(jù)格式:
{
"id": "123456",
"code": 200,
"message": "this is error msg when code is not 200",
"data":{
"fileName": "abc.bin",
"uploadId": "03d9151e-6***",
"offset": 123123
}
}
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
id | String | 消息ID號(hào)。String類型的數(shù)字,取值范圍0~4294967295,且每個(gè)消息ID在當(dāng)前設(shè)備中具有唯一性。 |
code | Integer | 結(jié)果碼。返回200表示成功,返回其他狀態(tài)碼,表示失敗,具體請(qǐng)參見(jiàn)設(shè)備端接收的錯(cuò)誤碼。 |
message | String | 請(qǐng)求失敗時(shí),返回的錯(cuò)誤信息。 |
data | Object | 返回設(shè)備端的數(shù)據(jù)。 |
fileName | String | 設(shè)備上傳文件的名稱。 |
uploadId | String | 本次上傳文件任務(wù)的標(biāo)識(shí)ID。后續(xù)上傳文件分片時(shí),需要傳遞該文件標(biāo)識(shí)ID。 |
offset | Long | 僅當(dāng)請(qǐng)求參數(shù)conflictStrategy為append,且物聯(lián)網(wǎng)平臺(tái)云端存在未完成上傳的文件時(shí),返回的已上傳文件的大小,單位為字節(jié)。 |
設(shè)備上傳文件分片
- 請(qǐng)求Topic:
/sys/${productKey}/${deviceName}/thing/file/upload/mqtt/send
。 - 響應(yīng)Topic:
/sys/${productKey}/${deviceName}/thing/file/upload/mqtt/send_reply
。
請(qǐng)求數(shù)據(jù)格式:
- 結(jié)構(gòu)如下圖:
結(jié)構(gòu)項(xiàng) 說(shuō)明 Header Length 表示請(qǐng)求Header中JSON字符串對(duì)應(yīng)的字節(jié)數(shù)組長(zhǎng)度,必須占位2個(gè)字節(jié),高位字節(jié)在前,低位字節(jié)在后。 例如,Header的JSON字符串使用UTF-8編碼轉(zhuǎn)碼成字節(jié)數(shù)組的長(zhǎng)度為十進(jìn)制的87,對(duì)應(yīng)十六進(jìn)制57,則高位字節(jié)為0x00,低位字節(jié)為0x57。
Header String Bytes 表示請(qǐng)求Header中JSON字符串對(duì)應(yīng)的字節(jié)數(shù)組,編碼格式為UTF-8。具體內(nèi)容,請(qǐng)參見(jiàn)下文的“Header的JSON數(shù)據(jù)格式”。 File Block Bytes 表示當(dāng)前文件分片的字節(jié)數(shù)組,字節(jié)順序按照相對(duì)于文件頭的偏移量從小至大排列。 CRC16/IBM 表示文件分片的校驗(yàn)值,僅支持CRC16/IBM,占位2個(gè)字節(jié),低位字節(jié)在前,高位字節(jié)在后。 例如,文件分片的校驗(yàn)值為0x0809,則低位字節(jié)為0x09,高位字節(jié)為0x08。
- Header的JSON數(shù)據(jù)格式:
{ "id":"123456", "params":{ "uploadId":"03d9151e-6***", "offset":34344, "bSize":123455, "isComplete":true } }
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
id | String | 消息ID號(hào)。String類型的數(shù)字,取值范圍0~4294967295,且每個(gè)消息ID在當(dāng)前設(shè)備中具有唯一性。 |
params | Object | 請(qǐng)求業(yè)務(wù)參數(shù)。 |
uploadId | String | 設(shè)備請(qǐng)求上傳文件時(shí)返回的文件上傳任務(wù)標(biāo)識(shí)ID。 |
offset | Long | 已上傳文件分片的總大小,單位為字節(jié)。 |
bSize | Long | 當(dāng)前上傳文件分片的大小,單位為字節(jié)。
|
isComplete | Boolean | 僅當(dāng)設(shè)備請(qǐng)求上傳文件中fileSize為-1,即文件大小未知時(shí),該參數(shù)有效,表示當(dāng)前分片是否是文件的最后一個(gè)分片。
|
響應(yīng)數(shù)據(jù)格式:
78117
,且物聯(lián)網(wǎng)平臺(tái)云端會(huì)自動(dòng)取消文件上傳任務(wù),并刪除已上傳的文件。{
"id":"123456",
"code":200,
"message":"this is error msg when code is not 200",
"data":{
"uploadId":"03d9151e-6***",
"offset":34344,
"bSize":123455,
"complete":true,
"ficMode":"crc64",
"ficValueClient":"0205d7***",
"ficValueServer":"0205d7***"
}
}
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
id | String | 消息ID號(hào)。String類型的數(shù)字,取值范圍0~4294967295,且每個(gè)消息ID在當(dāng)前設(shè)備中具有唯一性。 |
code | Integer | 結(jié)果碼。返回200表示成功,返回其他狀態(tài)碼,表示失敗,具體請(qǐng)參見(jiàn)設(shè)備端接收的錯(cuò)誤碼。 |
message | String | 上傳失敗時(shí),返回的錯(cuò)誤信息。 |
data | Object | 返回設(shè)備端的數(shù)據(jù)。 |
uploadId | String | 本次上傳文件任務(wù)的標(biāo)識(shí)ID。后續(xù)上傳文件分片時(shí),需要傳遞該文件標(biāo)識(shí)ID。 |
offset | Long | 已上傳文件分片的總大小,單位為字節(jié)。 |
bSize | Long | 當(dāng)前上傳文件分片的大小,單位為字節(jié)。
|
complete | Boolean | 當(dāng)上傳了最后一個(gè)分片數(shù)據(jù)后,文件上傳完成,返回該參數(shù),值為true。
|
ficMode | String | 文件的完整性校驗(yàn)?zāi)J健H粽?qǐng)求上傳文件時(shí)傳入了該參數(shù),對(duì)應(yīng)的值僅支持為crc64。 |
ficValueClient | String | 文件上傳完成,返回設(shè)備請(qǐng)求上傳文件時(shí)的ficValue值。 |
ficValueServer | String | 文件上傳完成,返回物聯(lián)網(wǎng)平臺(tái)云端計(jì)算的文件完整性校驗(yàn)值。該值與ficValueClient值相同,表示文件上傳完整。 |
設(shè)備取消上傳文件
- 請(qǐng)求Topic:
/sys/${productKey}/${deviceName}/thing/file/upload/mqtt/cancel
。 - 響應(yīng)Topic:
/sys/${productKey}/${deviceName}/thing/file/upload/mqtt/cancel_reply
。
請(qǐng)求數(shù)據(jù)格式:
{
"id":"123456",
"params":{
"uploadId":"03d9151e-6***"
}
}
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
id | String | 消息ID號(hào)。String類型的數(shù)字,取值范圍0~4294967295,且每個(gè)消息ID在當(dāng)前設(shè)備中具有唯一性。 |
params | Object | 請(qǐng)求業(yè)務(wù)參數(shù)。 |
uploadId | String | 設(shè)備請(qǐng)求上傳文件時(shí)返回的文件上傳任務(wù)標(biāo)識(shí)ID。 |
響應(yīng)數(shù)據(jù)格式:
{
"id":"123456",
"code":200,
"message":"uploading task for upload-id xxxx does not exist.",
"data":{
"uploadId":"03d9151e-6***"
}
}
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
id | String | 消息ID號(hào)。String類型的數(shù)字,取值范圍0~4294967295,且每個(gè)消息ID在當(dāng)前設(shè)備中具有唯一性。 |
code | Integer | 結(jié)果碼。返回200表示成功,返回其他狀態(tài)碼,表示失敗,具體請(qǐng)參見(jiàn)設(shè)備端接收的錯(cuò)誤碼。 |
message | String | 請(qǐng)求失敗時(shí),返回的錯(cuò)誤信息。 |
data | Object | 返回設(shè)備端的數(shù)據(jù)。 |
uploadId | String | 取消的文件上傳任務(wù)標(biāo)識(shí)ID。 |
相關(guān)文檔
設(shè)備端接收的錯(cuò)誤碼信息,請(qǐng)參見(jiàn)設(shè)備上傳文件相關(guān)錯(cuò)誤碼。