本申请涉及通信技术领域,尤其涉及一种文件上传处理方法及装置。
背景技术:
随着移动通信技术的飞速发展和移动多媒体时代的到来,手机作为人们必备的移动通信工具,已从简单的通话工具向智能化发展,演变成一个移动的信息收集和处理平台。在当前移动互联网时代,手机作为一种常见的终端,充当重要的角色。
在云计算时代,通过手机进行图片上传在不同业务场景下得到广泛应用。传统的图片上传过程包括前端处理过程和后端处理过程,前端处理过程是指手机进行图片处理(比如图片特效处理、文件压缩等)后发送,后端处理过程在服务器端进行,服务器接收到上传的图片数据后,在服务器端生成临时文件,然后通过应用程序将临时文件的数据读取出来,将图片规格等图片描述信息写入数据库,再将图片内容数据向图片存储系统发送,由图片存储系统进行存储。
由于手机所在的网络有可能是2g网络、3g网络或无线局域网等,网络的稳定性具有不确定性,而且图片上传过程中需要在服务器的内存中进行缓存,因此往往导致图片上传时延比较长,上传效率较低。而且,在服务器中缓存临时文件,也会占用服务器大量内存资源。
申请内容
本申请实施例提供了一种文件上传处理方法及装置,用以提高文件上传效率。
本申请实施例提供的文件上传处理方法,包括:
获取移动终端发送的文件数据;
获取所述文件数据中的文件描述信息以及文件内容;
根据获取到的文件描述信息,将获取到的文件内容存储到数据库中;其中,所述数据库中,所述文件描述信息与所述文件内容相关联。
优选地,所述文件数据为图片文件数据,所述文件描述信息和文件内容为图片文件的文件描述信息和图片内容。
优选地,获取到的图片文件数据中包括协议部分和文件部分,所述文件部分包括文件描述部分和文件内容部分,相邻部分之间用分隔符分割;
所述获取所述图片文件数据中的文件描述信息以及图片内容,包括:
根据相邻部分之间的分隔符,确定所述图片文件数据中的文件描述信息和图片内容的位置;
根据确定出的所述图片文件数据中的文件描述信息和图片内容的位置,获取所述图片文件数据中的文件描述信息以及图片内容。
优选地,所述根据获取到的文件描述信息,将获取到的图片内容存储到数据库中,包括:
根据获取到的文件描述信息查询所述数据库中的相应记录;
若未查询到,则在所述数据库中创建一条记录,将获取到的文件描述信息存储到该条记录的文件描述字段,将获取到的图片内容存储到该条记录的图片内容字段;
若查询到,则将获取到的图片内容存储到该条记录的图片内容字段。
优选地,所述根据获取到的文件描述信息,存储获取到的图片内容到数据库之后,还包括:
使用所述移动终端的客户端用户身份信息调用服务器端的应用程序接口,所述服务器端的应用程序接口用于在被调用后根据所述客户端用户身份信息将所述移动终端上传的图片应用于客户端应用程序。
优选地,所述文件描述信息包括以下信息中的一种或组合:文件名称、文 件类型、图片大小。
优选地,所述图片内容为二级制数据。
本申请实施例提供的服务器,包括:
第一获取模块,用于获取移动终端发送的文件数据;
第二获取模块,用于获取所述文件数据中的文件描述信息以及文件内容;
存储模块,用于根据获取到的文件描述信息,将获取到的文件内容存储到数据库中;其中,所述数据库中,所述文件描述信息与所述文件内容相关联。
优选地,所述文件数据为图片文件数据,所述文件描述信息和文件内容为图片文件的文件描述信息和图片内容。
优选地,获取到的图片文件数据中包括协议部分和文件部分,所述文件部分包括文件描述部分和文件内容部分,相邻部分之间用分隔符分割;
所述第二获取模块具体用于:
根据相邻部分之间的分隔符,确定所述图片文件数据中的文件描述信息和图片内容的位置;
根据确定出的所述图片文件数据中的文件描述信息和图片内容的位置,获取所述图片文件数据中的文件描述信息以及图片内容。
优选地,所述存储模块具体用于:
根据获取到的文件描述信息查询所述数据库中的相应记录;
若未查询到,则在所述数据库中创建一条记录,将获取到的文件描述信息存储到该条记录的文件描述字段,将获取到的图片内容存储到该条记录的图片内容字段;
若查询到,则将获取到的图片内容存储到该条记录的图片内容字段。
优选地,还包括:
调用模块,用于在根据获取到的文件描述信息,存储获取到的图片内容到数据库之后,使用所述移动终端的客户端用户身份信息调用服务器端的应用程序接口,所述服务器端的应用程序接口用于在被调用后根据所述客户端用户身 份信息将所述移动终端上传的图片应用于客户端应用程序。
优选地,所述文件描述信息包括以下信息中的一种或组合:文件名称、文件类型、图片大小。
优选地,所述图片内容为二级制数据。
本申请的上述实施例中,当服务器端获取到移动终端发送的文件数据后,获取该文件数据中的文件描述信息以及文件内容,并根据获取到的文件描述信息,将获取到的文件内容存储到数据库中。与现有技术相比,服务器端在接收到移动终端上传的文件后未将其缓存为临时文件,而是接收后就进行存储,从而降低了文件上传的时延,提高了文件上传的效率,并且还可以节省服务器端的内存资源开销。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例适用的系统架构示意图;
图2为本发明实施例提供的文件上传流程示意图;
图3为本发明实施例提供的服务器结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部份实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
本申请实施例提供了一种文件上传方案,用于提高文件上传效率。本申请 实施例提供的方案可应用于移动终端上传文件到网络侧的过程,其中,所述移动终端可以是手机、pda(personaldigitalassistant,掌上电脑)或智能穿戴设备等具有无线通信能力的电子设备。涉及到的文件类型可以是图片、音视频等多媒体文件,也可以是其他文件,如文本文件。本申请实施例尤其适用于图片类型的文件的上传过程。
下面结合附图对本申请实施例进行详细描述。
图1示例性地示出了本申请实施例适用的一种网络架构。如图1所示,该网络架构中可包括移动终端以及网络侧的服务器,移动终端和服务器通过网络进行通信。
上述架构中的移动终端可以通过网络将文件上传到网络侧的服务器。以图片上传为例,移动终端在进行文件上传之前,还可以对待上传的图片进行处理,比如可以进行图片特效处理、文件压缩处理等,然后按照规定的协议将图片文件封装为相应格式的文件,并上传到网络侧的服务器。
上述架构中的服务器可以实现对移动终端上传的文件进行存储。
仍以图片上传为例,为了实现某种与图片相关的应用,比如某种社交应用(该社交应用中需要用户提供头像并在客户端app(应用程序)的用户界面中可显示用户头像),移动终端上需要安装该应用的客户端app,服务器端需要安装该应用的服务器端app,客户端app和服务器端app相互配合来完成该社交应用。
上述网络架构中,移动终端和服务器可以通过网络进行信息交互,该网络可以是广域网、局域网或互联网,或者采用移动通信技术的互联网。移动终端可通过无线方式接入互联网,服务器通常采用有线方式与互联网连接。
优选地,移动终端和服务器可以采用云计算技术,以基于云计算技术的强大功能实现信息处理。服务器和移动终端可采用基于云计算技术的操作系统,比如yunos,从而可以整合云端和移动终端的资源和服务。
下面结合附图对本申请实施例进行详细描述。
参见图2,为本申请实施例提供的文件上传处理流程示意图。该流程可在网络侧的服务器端实现。如图所示,该流程可包括如下步骤:
步骤201:服务器获取移动终端发送的文件数据;
步骤202:服务器获取所述文件数据中的文件描述信息以及文件内容;
步骤203:服务器根据获取到的文件描述信息,将获取到的文件内容存储到数据库中;其中,所述数据库中,所述文件描述信息与所述文件内容相关联。
上述流程中,服务器端接收到移动终端发送来的文件数据后,无需进行缓存以生成临时文件,而是可将接收到的文件数据进行存储,因此一方面降低了文件上传的时延,提高了文件上传的效率,另一方面可以节省服务器的存储资源开销。
上述流程中,所涉及的文件类型可以是多种,下面以图片类型的文件为例,对图片上传处理过程进行详细描述。
移动终端按照规定的协议封装待上传的图片文件数据,然后将该图片文件数据发送给服务器。传输图片文件的协议可以是html(hypertextmark-uplanguage,超文本标记语言)协议。下面以html协议为例,对图1所示的图片上传处理过程进行详细描述。
在步骤201中,移动终端按照html协议将待上传的图片文件数据进行封装。在使用html协议对图片文件数据进行封装时,采用multipart/form-data(多部件的表单数据)格式。通常,multipart/form-data格式的报文中通常包括协议部分、文件描述部分和文件内容部分,相邻组成部分之间用分隔符进行分割。
下面的代码示例性地示出了一种图片文件数据的multipart/form-data格式报文内容。
假设移动终端需要发送一个图片文件,文件名为“kn.jpg”,接受文件的网页程序位于:http://192.168.24.56/logsys/home/uploadispeedlog!dodefault.html,那么,移动终端客户端链接192.168.24.56后,发送如下http(hypertext transferprotoco,超文本传输协议)请求:
post/logsys/home/uploadispeedlog!dodefault.htmlhttp/1.1
accept:text/plain,*/*
accept-language:zh-cn
host:192.168.24.56
content-type:multipart/form-data;boundary=---------------------7db372eb000e2
user-agent:winhttpclient
content-length:3693
connection:keep-alive
---------------------7db372eb000e2
content-disposition:form-data;name="file";filename="kn.gif"
content-type:image/jpeg
(此处省略jpeg文件二进制数据...)
---------------------7db372eb000e2--
上述代码中,第1行至第8行是协议的头,即协议部分,该部分代码主要声明命令的类型是post,协议版本信息,服务器地址,content-type为multipart/form-data,并定义了分隔符“---------------------7db372eb000e2”,用于分隔多个文件、表单项等,分隔符不会与文件或表单项内容中的数据发生冲突。在进行图片上传时,并非协议头部分的每个字段都需要说明,其中,content-type字段需要定义,它包括一个类似标志性质的名为boundary(边界)的标志,它可以是随便输入的字符串,用来分辨一段内容的开始。content-length:3693,这里的3693是要上传文件的总长度。
第10行之后到分隔符位置的部分是需要上传的数据,可以是文本,也可以是图片等。数据内容前面有content-disposition,content-type以及content-transfer-encoding等说明字段,用于定义文件描述信息,主要包括数据的类型(file),文件名称,文件类型(如图片格式)等。其后为具体的文件内容,对于图片文件来说即为图片文件的二进制数据。
每个分隔的数据都可以用content-type来表示下面数据的类型,可以参考 rfc1341(http://www.ietf.org/rfc/rfc1341.txt)。例如,contect-type:image/jpeg表示下面的数据是jpeg文件数据。
在步骤202中,服务器接收到移动终端发送的上述格式的图片文件数据后,对接收到的报文进行解析,获取其中的文件描述信息以及图片内容。由于移动终端发送的图片文件数据是根据协议规定的multipart/form-data格式,因此服务器可以根据该协议对接收到的multipart/form-data格式的图片文件数据进行解析。
具体地,服务器可根据图片文件数据报文中,相邻部分之间的分隔符,确定该图片文件数据中的文件描述信息和图片内容的位置,然后根据确定出的图片文件数据中的文件描述信息和图片内容的位置,获取该图片文件数据中的文件描述信息以及图片内容(如二进制数据)。
在步骤203中,服务器可根据获取到的文件描述信息,将获取到的文件内容(如二进制数据)存储到数据库中。服务器存储图片的方式主要可采用以下两种:
方式1:将图片存储到指定的目录中,将存储路径作为字段值添加到数据库记录中;
方式2:将图片以二进制数据方式存储到数据库中,作为ole字段的值。
根据图片的存储方式的不同,数据库的数据存储结构也相应有所不同。
对于上述方式1,数据库的数据表中,可设置如下字段:
id:序号;
filename:文件名称;
ext:文件扩展名;
size:文件大小;
intro:文件简要说明;
submit_date:上传时间
对于上述方式2,图片信息如果存放到数据库,在数据库中可增加存储图 片的字段(ole类型)。数据库中增加存放图片的字段名fileimage,数据类型为“ole对象”,该类型用来存放二进制图片数据。作为一个例子,可设置如下字段:
id:序号;
filename:文件名称;
fileimage:存放上传文件内容(二进制数据);
ext:文件扩展名;
size:文件大小;
intro:文件简要说明;
submit_date:上传时间;
width:图片的长;
height:图片的宽。
上述数据结构中,fileimage字段为“图片内容字段”,用于存储图片二进制数据;其余字段用于描述图片或图片文件,可统称为“文件描述字段”,“文件描述字段”具体包含的字段可如上所列出的字段中的一种或组合。“文件描述字段”中的具体内容可从服务器接收到的图片文件数据中提取。
本发明实施例优选地采用上述方式2进行图片存储。
以采用上述方式2进行图片存储为例,服务器可根据获取到的文件描述信息查询数据库中的记录,比如可以根据文件id、文件名称等信息,进一步地还可结合发送者的用户信息(比如用户id)查询数据库,以查询是否存在与这些信息匹配的记录(一条记录中包含“文件描述信息字段”和“图片内容字段”等字段,进一步地,还可包含用户id字段);若未查询到,则表明当前接收到的报文是一个图片文件对应的所有报文中的第一个报文,则在该数据库中创建一条记录,将获取到的文件描述信息存储到该条记录的文件描述字段,将获取到的图片内容存储到该条记录的图片内容字段;若查询到,则表明当前接收到的报文是一个图片文件对应的所有报文中除第一报文以外的某个报文,此时 相应的数据记录已创建,则服务器将获取到的图片内容存储到该条记录的图片内容字段。
需要说明的是,一个图片文件的数据量通常较大,而传输协议所规定的报文格式有一定的长度要求,因此通常需要将一个图片文件数据拆分为多个报文进行传输。
作为一个例子,服务器可使用asp的request对象的binaryread方法读取移动终端上传图片的二进制信息,从中获得上传的图片文件的文件名和绝对路径以及文件类型等信息,具体可根据其中的分隔符确定出文件名的二进制数据的起始位置,再利用asp技术将二进制数据转换成文件名保存。进一步地,服务器通过recordset对象的appendchunk方法,将二进制的文件内容写入数据库的ole字段。
进一步地,如果移动终端在上传图片之前,对图片进行了压缩处理,则服务器在收到移动终端发送的图片文件数据之后,首先进行解压缩处理,恢复得到原始图片数据。
通过以上描述可以看出,当服务器端获取到移动终端发送的文件数据后,获取该文件数据中的文件描述信息以及文件内容,并根据获取到的文件描述信息,将获取到的文件内容存储到数据库中。与现有技术相比,服务器端在接收到移动终端上传的文件后未将其缓存为临时文件,而是接收后就进行存储,从而降低了文件上传的时延,提高了文件上传的效率,并且还可以节省服务器端的内存资源开销。
进一步地,在一些实施例中,服务器根据获取到的文件描述信息,存储获取到的图片内容到数据库之后,还可使用移动终端的客户端用户身份信息(如用户id)调用服务器端的应用程序接口,服务器端的应用程序接口用于在被调用后根据该客户端用户身份信息将该移动终端上传的图片应用于客户端应用程序。通过服务器取代移动终端向开发者应用进行回调,可以实现回调信息的高可靠性。
在现有图片上传处理过程中,图片上传完成后,由客户端用户通过其客户端app发起回调过程。由于移动终端所在的网络有可能是2g网络、3g网络或无线局域网等,网络的稳定性具有不确定性,因此由客户端用户在移动终端侧发起回调过程,一方面,其时延可能较长,也可能回调过程失败,另一方面用户操作也比较繁琐。而本发明的上述实施例中,由服务器端模拟客户端用户身份发起回调,即代替客户端用户发起回调,与现有技术相比,可以减少时延,提高回调过程的成功率,另一方面,也可以简化用户操作。
为了更清楚地理解本发明的上述实施例,下面以一个具体应用场景为例,对本发明上述实施例的具体实现过程进行详细描述。
移动终端上需要安装应用a的客户端app,服务器端需要安装该应用的服务器端app,应用a是一种社交应用,需要用户提供头像并在客户端app的用户界面中显示。
在移动终端侧:
用户使用用户账号(用户id)登录移动终端的客户端app,在该客户端app提供的用户头像设置界面中选择“设置用户头像”的功能按钮或菜单命令,并根据设置界面的提示,从该移动终端的图片库中选择一个图片作为头像。之后,用户根据设置界面的提示,选择“上传图片”的功能按钮或菜单命令。
该客户端app根据该“上传图片”的命令,获取该图片文件描述信息以及图片内容的二进制数据,所获取的图片文件描述信息可包括:图片文件名称、图片类型(比如是jpeg格式还是其他图片格式)、绝对路径、图片的长宽等信息中的一种或组合。然后,按照html协议,将获取到的图片文件描述信息和该图片内容的二进制数据封装为一个或多个报文。具体的报文格式可参见前述实施例,在此不再重复。
该客户端app将封装好的报文发送给服务器,其中,服务器的地址可预先设置在该客户端app中,或者客户端app可采用其他方式获知该服务器的地址。
在服务器侧:
服务器接收移动终端发送的图片数据报文,按照html协议解析该报文,得到图片文件描述信息以及图片内容的二进制数据。其中,图片描述信息包括图片文件名称、图片文件格式、图片大小。服务器在数据库中创建一条记录,将获取到的图片文件名称、图片文件格式、图片大小,以及用户id填写到该条记录的相应字段,将获取到的图片内容的二进制数据添加到该条记录的ole字段。
之后,服务器以该客户端的用户id调用应用a的开发者api(applicationprogramminginterface,应用程序接口)。该api被调用后触发执行以下处理过程,将该客户端用户上传的图片应用到该客户端app中,即在用户界面的头像显示区域显示该图片。该过程称为回调过程。
基于相同的技术构思,本申请实施例还提供了一种服务器,该服务器可实现上述文件上传处理流程。
参见图3,为本申请实施例提供的服务器的结构示意图,如图所示,该装置可包括:第一获取模块301、第二获取模块302、存储模块303,其中:
第一获取模块301,用于获取移动终端发送的文件数据;
第二获取模块302,用于获取所述文件数据中的文件描述信息以及文件内容;
存储模块303,用于根据获取到的文件描述信息,将获取到的文件内容存储到数据库中;其中,所述数据库中,所述文件描述信息与所述文件内容相关联。
优选地,所述文件数据为图片文件数据,所述文件描述信息和文件内容为图片文件的文件描述信息和图片内容。
优选地,获取到的图片文件数据中包括协议部分和文件部分,所述文件部分包括文件描述部分和文件内容部分,相邻部分之间用分隔符分割。相应地,第二获取模块302可具体用于:根据相邻部分之间的分隔符,确定所述图片文 件数据中的文件描述信息和图片内容的位置;根据确定出的所述图片文件数据中的文件描述信息和图片内容的位置,获取所述图片文件数据中的文件描述信息以及图片内容。
优选地,存储模块303可具体用于:根据获取到的文件描述信息查询所述数据库中的相应记录;若未查询到,则在所述数据库中创建一条记录,将获取到的文件描述信息存储到该条记录的文件描述字段,将获取到的图片内容存储到该条记录的图片内容字段;若查询到,则将获取到的图片内容存储到该条记录的图片内容字段。
进一步地,该服务器还可包括调用模块304,用于在根据获取到的文件描述信息,存储获取到的图片内容到数据库之后,使用所述移动终端的客户端用户身份信息调用服务器端的应用程序接口,所述服务器端的应用程序接口用于在被调用后根据所述客户端用户身份信息将所述移动终端上传的图片应用于客户端应用程序。
优选地,所述文件描述信息包括以下信息中的一种或组合:文件名称、文件类型、图片大小。
优选地,所述图片内容为二级制数据。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个 流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。