許凌睿 張亮 桂康哲
【摘? 要】本文描述一種支持車載終端多種數(shù)據(jù)類型上傳的協(xié)議,該協(xié)議以HTTPS協(xié)議為基礎(chǔ),是一套實(shí)用通用的文件上傳協(xié)議,除常規(guī)的結(jié)構(gòu)化數(shù)據(jù)外,還支持非結(jié)構(gòu)化數(shù)據(jù)的上傳,能豐富采集數(shù)據(jù)類型的多樣性,同時(shí)也支持文件的分片上傳和斷點(diǎn)續(xù)傳,既可以減少大文件上傳失敗的概率,也可以解決大文件重復(fù)上傳導(dǎo)致資源、流量浪費(fèi)的問題。
【關(guān)鍵詞】車載終端;上傳協(xié)議;斷點(diǎn)續(xù)傳;分片上傳
中圖分類號(hào):U469.72? ? 文獻(xiàn)標(biāo)志碼:A? ? 文章編號(hào):1003-8639( 2023 )08-0066-02
Design of Visualization System Based on Chip Localization Data
XU Ling-rui,ZHANG Liang,GUI Kang-zhe
(SAIC GM Wuling Automoblie Co.,Ltd.,Guangxi Laboratory of New Energy Automobile,
Guangxi Key Laboratory of Automobile Four New Features,Liuzhou 545007,China)
【Abstract】This article describes a protocol that supports uploading multiple data types to vehicle terminals. The protocol is based on the HTTPS protocol and is a practical and universal file upload protocol. In addition to regular structured data,it also supports uploading unstructured data,which can enrich the diversity of data collection types. At the same time,it also supports fragmented uploading and breakpoint continuation of files,which can reduce the probability of large file upload failure,It can also solve the problem of resource and traffic waste caused by repeated uploading of large files.
【Key words】vehicle terminal;upload protocol;breakpoint resume;segment upload
1? 研究背景
汽車“節(jié)能減排”觀念深入人心,加上國家政策的大力推廣,國內(nèi)新能源汽車尤其是純電動(dòng)汽車發(fā)展迅速,在全國汽車保有量的占比越來越重,因此對(duì)新能源汽車運(yùn)行的數(shù)據(jù)進(jìn)行全面遠(yuǎn)程監(jiān)控、遠(yuǎn)程故障診斷、遠(yuǎn)程故障更新等功能的實(shí)現(xiàn),顯得日益重要。新能源汽車是一個(gè)復(fù)雜的機(jī)電一體化產(chǎn)品,經(jīng)過近幾年的發(fā)展,現(xiàn)有新能源汽車的車載終端已經(jīng)可以實(shí)現(xiàn)對(duì)一種或幾種通信線上數(shù)據(jù)的采集,能做到定時(shí)上傳,包括在網(wǎng)絡(luò)不好時(shí)的補(bǔ)發(fā)機(jī)制也在日益完善,逐漸形成了一個(gè)比較成熟的數(shù)據(jù)上報(bào)機(jī)制。這種數(shù)據(jù)往往是結(jié)構(gòu)化數(shù)據(jù)(行數(shù)據(jù),可以用二維表結(jié)構(gòu)來邏輯表達(dá)),最終需求都是以表格化的形式存儲(chǔ)。這種結(jié)構(gòu)化數(shù)據(jù)的采集和上報(bào)完全滿足新能源汽車的法律法規(guī)要求和一定程度的遠(yuǎn)程診斷和遠(yuǎn)程升級(jí)功能。
隨著新能源汽車的功能越來越豐富,對(duì)采集數(shù)據(jù)的多樣化需求越來越迫切,不同類型的數(shù)據(jù)尤其是音視頻、圖像這類文件,對(duì)智能駕駛、AI算法訓(xùn)練等很多功能的優(yōu)化都有很大的幫助,并且目前車輛故障分析最常見的方法就是先收集車載終端的日志再進(jìn)行數(shù)據(jù)分析,日志的文件往往都比較大,車端提供的網(wǎng)絡(luò)信號(hào)不夠穩(wěn)定,且周圍環(huán)境的信號(hào)也無法時(shí)刻保持通暢,一個(gè)大文件反復(fù)傳輸不僅會(huì)占用車載終端的功能資源,對(duì)車載終端的網(wǎng)絡(luò)流量也是一種極大的浪費(fèi)。因此,支持以文件流的形式上傳非結(jié)構(gòu)化文件(類似于文本、辦公文檔、各類報(bào)表、圖片、圖像、音頻/視頻等)并實(shí)現(xiàn)文件的分片上傳和斷點(diǎn)續(xù)傳功能就顯得尤為重要。
本文介紹一種基于https文本傳輸協(xié)議、由多個(gè)接口組成的支持多數(shù)據(jù)類型上傳的文件協(xié)議,且支持分片上傳和斷點(diǎn)續(xù)傳,適用于所有車載終端,用CA證書做雙向認(rèn)證和TLS通道加密,是一個(gè)適用范圍極廣、應(yīng)用簡便,且能保證安全的文件上傳協(xié)議。
2? 文件上傳接口介紹
1)終端上傳認(rèn)證接口。終端上傳認(rèn)證接口用于對(duì)上傳任務(wù)的終端進(jìn)行身份認(rèn)證和鑒權(quán)。其通過授權(quán)碼和終端ID生成請(qǐng)求認(rèn)證TOKEN,作為文件上傳接口授權(quán)令牌,有效期為24h,且用業(yè)務(wù)系統(tǒng)識(shí)別碼來判斷不同的業(yè)務(wù)、廠家等信息,并存到相應(yīng)的位置。授權(quán)碼、終端ID和業(yè)務(wù)系統(tǒng)識(shí)別碼都是線下約定的固定參數(shù),按照接口文檔里約定好的簽名加密方式調(diào)用接口請(qǐng)求認(rèn)證,會(huì)返回TOKEN,作為后續(xù)接口調(diào)用的身份認(rèn)證。若任何一個(gè)參數(shù)有問題,或加密方式未通過認(rèn)證,則都不會(huì)獲取到TOKEN這個(gè)參數(shù),保證了服務(wù)端的安全性,使其不會(huì)被任何一個(gè)車載終端訪問到。
2)服務(wù)端任務(wù)查詢。服務(wù)端任務(wù)查詢接口主要用于查詢服務(wù)端支持的相關(guān)信息。調(diào)用該接口需要輸入1)接口中獲得的TOKEN參數(shù),服務(wù)端會(huì)對(duì)TOKEN做校驗(yàn),通過后會(huì)返回fileMaxSize(單個(gè)文件最大上傳大小,單位byte)、checksumAlgorithm(服務(wù)端支持的CHECKSUM算法,多個(gè)以逗號(hào)分隔)和partMaxSize(單個(gè)分片的上傳大小為4×1024×1024,單位byte)這3個(gè)參數(shù),表示服務(wù)端支持的文件上傳分片信息,用于指導(dǎo)車載終端對(duì)文件進(jìn)行分割。
3)創(chuàng)建上傳任務(wù)。創(chuàng)建上傳任務(wù)接口主要用于創(chuàng)建上傳任務(wù),同一個(gè)任務(wù)下可以上傳多個(gè)文件。因?yàn)槊總€(gè)接口都可以獨(dú)立被調(diào)用,所以調(diào)用每個(gè)接口都同樣需要輸入1)接口中獲得的TOKEN參數(shù),服務(wù)端會(huì)對(duì)TOKEN做校驗(yàn),通過后返回taskId(任務(wù)id)給到車載終端。
4)創(chuàng)建上傳文件。創(chuàng)建上傳文件接口用于創(chuàng)建一個(gè)傳輸任務(wù)下具體的文件,并可以得到文件的存儲(chǔ)地址。同理,傳入TOKEN做校驗(yàn),傳入taskId、fileName(文件名)和fileSize(文件總長度,單位byte)作為該文件的基本信息,服務(wù)端會(huì)返回location(文件上傳地址)、fileId(文件id)作為應(yīng)答,location為完整的url,也包含了fileid,操作文件相關(guān)均調(diào)用該url訪問接口。
5)上傳文件。上傳文件接口用于上傳一個(gè)具體的文件。傳入TOKEN做校驗(yàn),傳入taskId、partNum[文件分片編號(hào),范圍(1-10000)]、partChecksum(值為校驗(yàn)算法名和校驗(yàn)值,中間使用空格分隔)、partSize(本次上傳內(nèi)容長度,單位byte)作為參數(shù),最后傳輸partContent(文件的二進(jìn)制流內(nèi)容)。
文件分片編號(hào)的目的是為了斷點(diǎn)續(xù)傳更加方便,可以從斷掉的那個(gè)分片號(hào)開始傳輸,不會(huì)影響最終的文件合成。
6)上傳文件完成。上傳文件完成接口用于在上傳文件完成時(shí)通知服務(wù)端。傳入TOKEN認(rèn)證通過后,傳參taskId、fileSize、partCount(文件上傳總分片數(shù)量)告知服務(wù)端該文件已上傳完成。如若該文件用了數(shù)據(jù)加密,則需額外傳一個(gè)參數(shù)(encryptkey)通知服務(wù)端,以便服務(wù)端在后續(xù)下載該文件的時(shí)候知道是否需要做解密。
一個(gè)文件上傳完成之后可以去調(diào)用4)的接口重新再上傳一個(gè)新的文件。
7)上傳任務(wù)完成。上傳任務(wù)完成接口用于在上傳任務(wù)完成時(shí)通知服務(wù)端,注意一個(gè)任務(wù)可以包含很多個(gè)完整的文件,等這次所有的文件上傳完成之后再調(diào)用該接口。
TOKEN校驗(yàn)通過后,傳入taskId,并用數(shù)組形式傳入其中每個(gè)文件對(duì)應(yīng)的參數(shù)(fileId、fileName 和fileSize)告知服務(wù)端,服務(wù)端再收到通知后會(huì)根據(jù)參數(shù)值將每個(gè)文件的分片合并復(fù)原為一個(gè)完整的文件存儲(chǔ)起來。
3? 文件查詢相關(guān)接口介紹
1)查詢上傳文件/分片狀態(tài)。查詢上傳文件/分片狀態(tài)接口用于查詢上傳文件或者分片的狀態(tài)。傳入需要查詢的taskId和partNum,服務(wù)端會(huì)將該任務(wù)下該分片編號(hào)的上傳狀態(tài)返回,fileSize、fileStatus(文件上傳狀態(tài),具體信息見表1)、partInfos(文件分片信息,包括partNum、partSize和partChecksum)。上傳方根據(jù)服務(wù)端返回的狀態(tài)值可以知道在某個(gè)任務(wù)下,某幾個(gè)文件或某幾個(gè)分片的上傳狀態(tài)。
2)查詢上傳任務(wù)狀態(tài)。查詢上傳任務(wù)狀態(tài)接口用于查詢某個(gè)任務(wù)的整體上傳狀態(tài)。驗(yàn)證通過后傳入taskId,服務(wù)端會(huì)返回uploadStatus(文件上傳狀態(tài)),同表1,調(diào)用查詢狀態(tài)接口可以在任何一個(gè)步驟中進(jìn)行,以便于上傳方在任何時(shí)候都可以掌握上傳任務(wù)、文件或分片的上傳信息,及時(shí)進(jìn)行補(bǔ)傳、取消上傳等操作。
3)取消上傳文件。取消上傳文件接口用于取消未完成的上傳文件,已完成的上傳文件無法通過此接口刪除服務(wù)端資源。驗(yàn)證通過后,傳入fileId,服務(wù)端會(huì)取消未上傳完成的文件,已經(jīng)上傳成功的文件會(huì)作為該任務(wù)下的文件存儲(chǔ),不會(huì)受到影響。
4)取消上傳任務(wù)。取消上傳任務(wù)接口用于取消未完成的上傳任務(wù),已完成的上傳文件無法通過此接口刪除服務(wù)端資源。驗(yàn)證通過后,傳入fileId,服務(wù)端會(huì)取消對(duì)應(yīng)的文件,該fileId也會(huì)被同步刪除。此處需要注意的是無法取消一個(gè)文件中的任一個(gè)分片的上傳任務(wù),如已上傳的分片總數(shù)量和最初輸入的分片總數(shù)量(partCount)對(duì)不上,則服務(wù)端會(huì)報(bào)錯(cuò),無法繼續(xù)合成文件。
車載終端上傳/查詢文件流程如圖1所示。
4? 文件合并
文件上傳時(shí),一般有兩種文件合并方式:第1種為邊上傳邊合并,服務(wù)端僅需要存儲(chǔ)最近一次上傳成功的分片,占用服務(wù)器的存儲(chǔ)資源較少;第2種為服務(wù)器把所有上傳的分片文件暫存到臨時(shí)文件夾中,等文件分片全部上傳完成后再合并所有的文件,并刪除臨時(shí)存儲(chǔ)的文件。本文采用的是第2種文件合并方法,該方法雖然會(huì)占用部分服務(wù)器存儲(chǔ)資源,但是存儲(chǔ)資源本身費(fèi)用較低,而且也具備以下優(yōu)點(diǎn):①等所有分片都在服務(wù)端保存成功時(shí)才進(jìn)行文件合并,能很好地保證接收文件的完整性;②若文件上傳中途失敗,服務(wù)端不會(huì)主動(dòng)發(fā)起文件合并的操作,減少了計(jì)算資源的浪費(fèi)。
5? 結(jié)論
本文介紹一種車載終端上傳數(shù)據(jù)的通用協(xié)議,不僅支持通用結(jié)構(gòu)化數(shù)據(jù)的上傳,也支持非結(jié)構(gòu)化數(shù)據(jù)的上傳,在保證傳統(tǒng)功能的同時(shí)支持發(fā)展智能駕駛等新興功能。對(duì)于網(wǎng)絡(luò)環(huán)境不穩(wěn)定的車載終端,為了保證車端上傳數(shù)據(jù)的完整性、準(zhǔn)確性,補(bǔ)發(fā)數(shù)據(jù)的功能是必不可少的,但像大文件的傳輸,本身成功率會(huì)比小文件低,且重新傳輸消耗的流量、時(shí)間和資源代價(jià)都比較大。本文介紹的協(xié)議支持分片上傳和斷點(diǎn)續(xù)傳的功能,把難上傳的大文件切割成易于上傳的小文件,遇到網(wǎng)絡(luò)原因未上傳成功的小文件可以等網(wǎng)絡(luò)環(huán)境通暢以后繼續(xù)上傳,在提高了上傳成功率的同時(shí)減少重新上傳整個(gè)文件的次數(shù),既保證了車載終端上傳數(shù)據(jù)的完整和準(zhǔn)確度,又減少了車端資源的浪費(fèi),在保障車端基本功能順利實(shí)現(xiàn)的同時(shí)可以增大功能的多樣性和復(fù)雜性。
參考文獻(xiàn):
[1] 朱愛梅. 利用Http協(xié)議實(shí)現(xiàn)斷點(diǎn)續(xù)傳[J]. 企業(yè)家天地(下旬刊),2007(9):181-182.
[2] 王莉敏,梁正和,段全鋒. 基于HTML5大文件斷點(diǎn)續(xù)傳的實(shí)現(xiàn)方案[J]. 計(jì)算機(jī)與現(xiàn)代化,2016(3):91-95.
(編輯? 凌? 波)
作者簡介
許凌睿(1995—),女,數(shù)據(jù)工程師,碩士,主要從事大數(shù)據(jù)平臺(tái)相關(guān)的工作。