许凌睿 张亮 桂康哲
【摘 要】本文描述一种支持车载终端多种数据类型上传的协议,该协议以HTTPS协议为基础,是一套实用通用的文件上传协议,除常规的结构化数据外,还支持非结构化数据的上传,能丰富采集数据类型的多样性,同时也支持文件的分片上传和断点续传,既可以减少大文件上传失败的概率,也可以解决大文件重复上传导致资源、流量浪费的问题。
【关键词】车载终端;上传协议;断点续传;分片上传
中图分类号:U469.72 文献标志码:A 文章编号: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 研究背景
汽车“节能减排”观念深入人心,加上国家政策的大力推广,国内新能源汽车尤其是纯电动汽车发展迅速,在全国汽车保有量的占比越来越重,因此对新能源汽车运行的数据进行全面远程监控、远程故障诊断、远程故障更新等功能的实现,显得日益重要。新能源汽車是一个复杂的机电一体化产品,经过近几年的发展,现有新能源汽车的车载终端已经可以实现对一种或几种通信线上数据的采集,能做到定时上传,包括在网络不好时的补发机制也在日益完善,逐渐形成了一个比较成熟的数据上报机制。这种数据往往是结构化数据(行数据,可以用二维表结构来逻辑表达),最终需求都是以表格化的形式存储。这种结构化数据的采集和上报完全满足新能源汽车的法律法规要求和一定程度的远程诊断和远程升级功能。
随着新能源汽车的功能越来越丰富,对采集数据的多样化需求越来越迫切,不同类型的数据尤其是音视频、图像这类文件,对智能驾驶、AI算法训练等很多功能的优化都有很大的帮助,并且目前车辆故障分析最常见的方法就是先收集车载终端的日志再进行数据分析,日志的文件往往都比较大,车端提供的网络信号不够稳定,且周围环境的信号也无法时刻保持通畅,一个大文件反复传输不仅会占用车载终端的功能资源,对车载终端的网络流量也是一种极大的浪费。因此,支持以文件流的形式上传非结构化文件(类似于文本、办公文档、各类报表、图片、图像、音频/视频等)并实现文件的分片上传和断点续传功能就显得尤为重要。
本文介绍一种基于https文本传输协议、由多个接口组成的支持多数据类型上传的文件协议,且支持分片上传和断点续传,适用于所有车载终端,用CA证书做双向认证和TLS通道加密,是一个适用范围极广、应用简便,且能保证安全的文件上传协议。
2 文件上传接口介绍
1)终端上传认证接口。终端上传认证接口用于对上传任务的终端进行身份认证和鉴权。其通过授权码和终端ID生成请求认证TOKEN,作为文件上传接口授权令牌,有效期为24h,且用业务系统识别码来判断不同的业务、厂家等信息,并存到相应的位置。授权码、终端ID和业务系统识别码都是线下约定的固定参数,按照接口文档里约定好的签名加密方式调用接口请求认证,会返回TOKEN,作为后续接口调用的身份认证。若任何一个参数有问题,或加密方式未通过认证,则都不会获取到TOKEN这个参数,保证了服务端的安全性,使其不会被任何一个车载终端访问到。
2)服务端任务查询。服务端任务查询接口主要用于查询服务端支持的相关信息。调用该接口需要输入1)接口中获得的TOKEN参数,服务端会对TOKEN做校验,通过后会返回fileMaxSize(单个文件最大上传大小,单位byte)、checksumAlgorithm(服务端支持的CHECKSUM算法,多个以逗号分隔)和partMaxSize(单个分片的上传大小为4×1024×1024,单位byte)这3个参数,表示服务端支持的文件上传分片信息,用于指导车载终端对文件进行分割。
3)创建上传任务。创建上传任务接口主要用于创建上传任务,同一个任务下可以上传多个文件。因为每个接口都可以独立被调用,所以调用每个接口都同样需要输入1)接口中获得的TOKEN参数,服务端会对TOKEN做校验,通过后返回taskId(任务id)给到车载终端。
4)创建上传文件。创建上传文件接口用于创建一个传输任务下具体的文件,并可以得到文件的存储地址。同理,传入TOKEN做校验,传入taskId、fileName(文件名)和fileSize(文件总长度,单位byte)作为该文件的基本信息,服务端会返回location(文件上传地址)、fileId(文件id)作为应答,location为完整的url,也包含了fileid,操作文件相关均调用该url访问接口。
5)上传文件。上传文件接口用于上传一个具体的文件。传入TOKEN做校验,传入taskId、partNum[文件分片编号,范围(1-10000)]、partChecksum(值为校验算法名和校验值,中间使用空格分隔)、partSize(本次上传内容长度,单位byte)作为参数,最后传输partContent(文件的二進制流内容)。
文件分片编号的目的是为了断点续传更加方便,可以从断掉的那个分片号开始传输,不会影响最终的文件合成。
6)上传文件完成。上传文件完成接口用于在上传文件完成时通知服务端。传入TOKEN认证通过后,传参taskId、fileSize、partCount(文件上传总分片数量)告知服务端该文件已上传完成。如若该文件用了数据加密,则需额外传一个参数(encryptkey)通知服务端,以便服务端在后续下载该文件的时候知道是否需要做解密。
一个文件上传完成之后可以去调用4)的接口重新再上传一个新的文件。
7)上传任务完成。上传任务完成接口用于在上传任务完成时通知服务端,注意一个任务可以包含很多个完整的文件,等这次所有的文件上传完成之后再调用该接口。
TOKEN校验通过后,传入taskId,并用数组形式传入其中每个文件对应的参数(fileId、fileName 和fileSize)告知服务端,服务端再收到通知后会根据参数值将每个文件的分片合并复原为一个完整的文件存储起来。
3 文件查询相关接口介绍
1)查询上传文件/分片状态。查询上传文件/分片状态接口用于查询上传文件或者分片的状态。传入需要查询的taskId和partNum,服务端会将该任务下该分片编号的上传状态返回,fileSize、fileStatus(文件上传状态,具体信息见表1)、partInfos(文件分片信息,包括partNum、partSize和partChecksum)。上传方根据服务端返回的状态值可以知道在某个任务下,某几个文件或某几个分片的上传状态。
2)查询上传任务状态。查询上传任务状态接口用于查询某个任务的整体上传状态。验证通过后传入taskId,服务端会返回uploadStatus(文件上传状态),同表1,调用查询状态接口可以在任何一个步骤中进行,以便于上传方在任何时候都可以掌握上传任务、文件或分片的上传信息,及时进行补传、取消上传等操作。
3)取消上传文件。取消上传文件接口用于取消未完成的上传文件,已完成的上传文件无法通过此接口删除服务端资源。验证通过后,传入fileId,服务端会取消未上传完成的文件,已经上传成功的文件会作为该任务下的文件存储,不会受到影响。
4)取消上传任务。取消上传任务接口用于取消未完成的上传任务,已完成的上传文件无法通过此接口删除服务端资源。验证通过后,传入fileId,服务端会取消对应的文件,该fileId也会被同步删除。此处需要注意的是无法取消一个文件中的任一个分片的上传任务,如已上传的分片总数量和最初输入的分片总数量(partCount)对不上,则服务端会报错,无法继续合成文件。
车载终端上传/查询文件流程如图1所示。
4 文件合并
文件上传时,一般有两种文件合并方式:第1种为边上传边合并,服务端仅需要存储最近一次上传成功的分片,占用服务器的存储资源较少;第2种为服务器把所有上传的分片文件暂存到临时文件夹中,等文件分片全部上传完成后再合并所有的文件,并删除临时存储的文件。本文采用的是第2种文件合并方法,该方法虽然会占用部分服务器存储资源,但是存储资源本身费用较低,而且也具备以下优点:①等所有分片都在服务端保存成功时才进行文件合并,能很好地保证接收文件的完整性;②若文件上传中途失败,服务端不会主动发起文件合并的操作,减少了计算资源的浪费。
5 结论
本文介绍一种车载终端上传数据的通用协议,不仅支持通用结构化数据的上传,也支持非结构化数据的上传,在保证传统功能的同时支持发展智能驾驶等新兴功能。对于网络环境不稳定的车载终端,为了保证车端上传数据的完整性、准确性,补发数据的功能是必不可少的,但像大文件的传输,本身成功率会比小文件低,且重新传输消耗的流量、时间和资源代价都比较大。本文介绍的协议支持分片上传和断点续传的功能,把难上传的大文件切割成易于上传的小文件,遇到网络原因未上传成功的小文件可以等网络环境通畅以后继续上传,在提高了上传成功率的同时减少重新上传整个文件的次数,既保证了车载终端上传数据的完整和准确度,又减少了车端资源的浪费,在保障车端基本功能顺利实现的同时可以增大功能的多样性和复杂性。
参考文献:
[1] 朱爱梅. 利用Http协议实现断点续传[J]. 企业家天地(下旬刊),2007(9):181-182.
[2] 王莉敏,梁正和,段全锋. 基于HTML5大文件断点续传的实现方案[J]. 计算机与现代化,2016(3):91-95.
(编辑 凌 波)
作者简介
许凌睿(1995—),女,数据工程师,硕士,主要从事大数据平台相关的工作。