专利名称:一种文件传输方法、系统和装置的制作方法
技术领域:
本发明涉及文件传输技术领域,尤其涉及一种文件传输方法、系统和装置。
背景技术:
超文本传输协议(HyperText Transfer Protocol, HTTP)是互联网上应用最为广泛的一种网络协议。所有的WWW文件传输都遵守HTTP协议。RFC1867规范主要是在现有的HTTP协议上做出了两处修改,一是为INPUT元素的TYPE属性增加了一个FILE选项,二是INPUT标记可以具有ACCEPT属性,该属性能够指定可被上传的文件类型或文件格式列表。另外,RFC1867规范还定义了一种新的MME类型 multipart/form-data,以及当处理一个带有 ENCTYPE = " multipart/form-data;/ 和 / 或含有〈INPUT type=" file" >的标记的表单时所应该采取的处理过程。目前RFC1867协议规范中,用户上传一个文件的数据包括HTTP请求头和HTTP实体内容两部分,具体地,上传的文件数据=HTTP请求头+回车换行+HTTP实体内容,下面分别对HTTP请求头和HTTP实体内容进行介绍(I) HTTP 请求头HTTP请求头主要描述了 HTTP所传输数据的一些信息,例如主机(Host)、数据内容类型(Content-type)、实体内容总长度(Content-length)等都是HTTP请求头。HTTP请求头里各字段的组织方式为=HTTP头字段名称+ +空格+HTTP头字段信息+回车换行。下面为HTTP请求头的例子
Accept: */*\r\nUser-Agent: Mozilla/4.0\r\n
Referer: http://www.qq.com/\r\nAccept-Language: zh-cn\r\n
Content-Type:multipart/form-data; boundary=................7dbO31 b063c\r\n
Content-Length: 258012\r\n\r\n其中,Content-Length代表HTTP实体内容的总长度,Content-Type 中的boundary表示HTTP实体内容分隔符。Acceptsuser-Agent>Referer 和 Accept-Language 是 html 语言的标准规范,此处不赘述。⑵HTTP实体内容HTTP实体内容由多个form-data内容段组成,各个form-data内容段用“一分隔符”分隔,最后一个“一分隔符一”表示结束。每一个form-data内容段由form-data头描述和form-data实体内容组成,每一个form-data都有一个content-disposition标题头,它的值是"form-data",它的属性指明了其在表单内的字段名。举例来说, 'content-disposition form-data ;name = " description " ',这里的description就是对应于该字段的字段名,该字段的值就是form-data的实体内容。其中,对于文件传输,会有一个特殊的字段名filename,表明传输的是一个文件。例如
................7db031b063c\r\n
Content-Disposition: form-data; name="description"\r\n\r\n
Hello world\r\n................7db031b063c\r\n
Content-Disposition:form-data;name="filename";
filename="Royale.jpg"\r\n
Content-Type: image/pjpeg\r\n
\r\n
................7db031b063c—上面的HTTP实体内容表示的有2个form-data的内容段,第2个form-data的内容段的name = " filename "表明第2个form-data传输的是一个文件,filename="Royale. jpg"表明第2个form-data传输的文件名称是Royale. jpg。现有技术对于每一个form-data内容段用“一分隔符”分隔,最后一个“一分隔符一”表示结束,这样的实现会导致服务器段接收到客户请求后,在分析文件内容的时候必须要对整个文件进行字符串比较。这种字符串比较分析的方式效率非常低,特别是当传输的文件较大时(例如一个图片文件或者视频文件),会导致服务器CPU资源大量的消耗。
发明内容
有鉴于此,本发明提供了一种文件传输方法、系统和装置,以便避免服务器对整个传输文件的字符串分析比较的过程,降低服务器在处理客户端上传的文件传输信息时的CPU消耗。本发明的技术方案具体是这样实现的—种文件传输方法,该方法包括服务器接收客户端上传的文件传输信息,查询该文件传输信息中是否包含form-data内容段的长度信息,在文件传输信息中包含form-data内容段的长度信息时,月艮务器根据form-data内容段的长度信息确定form-data内容段的结束位置。
—种文件传输系统,该系统包括服务器和客户端;
所述客户端,用于在文件传输信息中设置form-data内容段的长度信息,将该文件传输信息上传给服务器;所述服务器,用于接收客户端上传的文件传输信息,查询该文件传输信息中是否包含form-data内容段的长度信息,在文件传输信息中包含form-data内容段的长度信息时,服务器根据form-data内容段的长度信息确定form-data内容段的结束位置。一种客户端,该客户端包括信息组织模块和文件上传模块;所述信息组织模块,用于组织文件传输信息,在文件传输信息中设置form-data内容段的长度信息;所述文件上传模块,用于将所述文件传输信息上传给服务器。 一种服务器,该服务器包括接收模块、查询模块和结束位置确定模块;所述接收模块,用于接收客户端上传的文件传输信息;所述查询模块,用于查询该文件传输信息中是否包含form-data内容段的长度信息;所述结束位置确定模块,用于在文件传输信息中包含form-data内容段的长度信息时,根据form-data内容段的长度信息确定form-data内容段的结束位置。由上述技术方案可见,本发明在客户端上传的文件传输信息中包含有form-data内容段的长度信息,服务器接收客户端上传的文件传输信息后,查询文件传输信息中的form-data内容段的长度信息,根据该form-data内容段的长度信息确定form-data内容段的结束位置,因此不需要对客户端上传的整个文件进行字符串比较,与现有技术相比,能够降低服务器在处理文件上传请求时的CPU消耗。
图I是本发明提供的文件传输方法流程图。图2是本发明提供的文件传输系统的组成示意图。图3是本发明提供的客户端的结构图。图4是本发明提供的服务器的结构图。
具体实施例方式图I是本发明提供的文件传输方法流程图。如图I所示,该方法包括步骤101,服务器接收客户端上传的文件传输信息。其中,客户端通过向服务器发送HTTP请求上传文件传输信息,采用了本发明的客户端在文件传输信息中设置form-data内容段的长度信息,对于没有采用本发明的客户端,可以按照现有方法组织文件传输信息,即不需要在文件传输信息中设置form-data内容段的长度信息。步骤102,服务器查询该文件传输信息中是否包含form-data内容段的长度信息,如果是,执行步骤103,否则,执行步骤104。本步骤中,如果服务器查询到文件传输信息中包含有form-data内容段的长度信息,则说明该文件传输信息是由采用了本发明的客户端上传的,否则说明该文件传输信息不是由采用了本发明的客户端上传的。步骤103,服务器根据form-data内容段的长度信息确定form-data内容段的结束位置。本步骤中,针对采用了本发明的客户端上传的文件传输信息,直接根据文件传输信息中的form-data内容段的长度信息确定form-data内容段的结束位置,而不需要对文件传输信息整体进行字符串比较,能够降低服务器的CPU消耗。步骤104,服务器对所述客户端上传的文件传输信息进行字符串比较,根据该文件传输信息中的form-data内容段的结束标识字符确定form-data内容段的结束位置。本步骤中,对于没有采用本发明的客户端上传的文件传输信息,可以采用现有的方法确定form-data内容段的长度信息,即通过对文件传输信息进行字符串比较,根据form-data内容段的结束标识字符确定form-data内容段的结束位置,也可以采用其他方 法确定form-data内容段的结束位置,本发明对没有采用本发明的客户端上传的文件传输信息如何确定form-data内容段的结束位置不做限制。下面以form-data内容段的长度信息携带在该form-data内容段的头描述中为例,对图I所示方法中服务器查询文件传输信息中是否包含form-data内容段的长度信息的具体流程进行示例性说明,具体地可以包括如下步骤步骤I :服务器接收HTTP请求后,判断该请求中是否包含form-data内容段,如果是,执行步骤2,否则,可以按照其他现有流程处理。步骤2 :服务器对HTTP协议头进行分析,确定出分隔符字符串的内容。本步骤中的分隔符字符串,就是HTTP请求头中的boundary,例如,在HTTP请求头总包括Content-Type multipart / form-data ;boundary=----------------7db031b063c\r\n其含义是该HTTP请求中包括form-data内容段,分隔符字符串的内容是----------------7db031b063c\r\n。步骤3 :服务器根据分隔符字符串的内容,查找开始分隔符字符串,如果查找到开始分隔符字符串,执行步骤4,否则,继续执行步骤3,如果一直未能查找到开始分隔符字符串,则执行现有的容错处理流程。步骤4,查找并判断是否查找到form-data内容段的头描述,如果是,执行步骤5,如果一直未能查找到该form-data内容段的头描述,则执行现有的容错处理流程。步骤5,在form-data内容段的头描述中,查找form-data内容段的长度信息,如果查找到所述长度信息,执行步骤6,否则,执行步骤7。步骤6,根据所述长度信息直接定位到form-data内容段的结束分隔符字符串,结束本流程。步骤7,通过字符匹配确定form-data内容段的结束分隔符字符串,结束本流程。图I所示方法中,服务器在客户端上传的文件传输信息中包含form-data内容段的长度信息时,根据form-data内容段的长度信息确定form-data内容段的结束位置,由于不需要对文件传输信息整体做字符串比较,因此能够降低服务器的CPU消耗。另外,图I所示方法通过查询文件传输信息中是否包含form-data内容段的长度信息,且在文件传输信息中不包含form-data内容段的长度信息时,通过对文件传输信息整体做字符串比较等方法来确定form-data内容段的结束位置,还能够实现与没有采用本发明的客户端的兼容。图I所示方法中,采用本发明的客户端可以将form-data内容段的长度信息设置在文件传输信息的HTTP请求头的任意位置、或者设置在文件传输信息的form-data头描述的任意位置。例如,将form-data内容段的长度信息设置在form-data头描述中的单独的form-data内容段长度信息字段中、或者设置在form-data头描述中的文件属性字段中。form-data内容段的长度信息可以以任意的名称来标识。其中,所述form-data内容段的长度信息可以包括form-data实体内容的长度,或者包括form-data头描述和实体内容的总长度。
下面举一个具体的例子,说明如何在文件传输信息中设置form-data内容段的长度信息,所举例子并不用于限制本发明以客户端将form-data内容段的长度信息设置在form-data头描述中的单独的form-data内容段长度信息字段中、或者设置在form-data头描述中的文件属性字段中为
例,在设置长度信息之前,文件传输信息为
.............................7db031b063c\r\n
Content-Disposition: form-data; name="filename"; filename="Royale.jpg"\r\n
Content-Type: image/pjpeg\r\n
\r\n
.............................7db031b063c—将长度信息设置在form-data头描述中的单独的form-data内容段长度信息字段
中时,所述文件传输信息变为
.............................7db031b063c\r\n
Content-Disposition: form-data; name="filename"; filename="Royale.jpg"\r\n Content-Type: image/pjpeg\r\n Content-Length: 23\r\n \r\n
.............................7db031b063c—将长度信息设置在form-data头描述中的文件属性字段中时,所述文件传输信息变为.............................7db031b063c\r\n
Content-Disposition: form-data; name="filename"; filename="Royale.jpg";filelength="23 "\r\n
Content-Type: image/pjpeg\r\n\r\n
.............................7db031b063c—其中,Content-Length和 filelength 代表本 form-data 内容段的长度。客户端可以针对文件传输信息中携带的每个form-data内容段均设置长度信息,也可以仅针对文件传输信息中携带的所有form-data内容段中的部分form-data内容段设·置长度信息。服务器端在处理分析每个form-data内容段时,无需再对整个form-data内容段进行字符串比较来确定form-data内容段的结束位置,只需要在查询出form-data内容段的长度信息后,直接利用长度信息确定form-data内容段的结束位置。根据上述方法,本发明还提供了相应的系统和装置,具体请参见图2 图4。图2是本发明提供的文件传输系统的组成示意图。如图2所示,该系统包括客户端201和服务器202。客户端201,用于在文件传输信息中设置form-data内容段的长度信息,将该文件传输信息上传给服务器202。服务器202,用于接收客户端201上传的文件传输信息,查询该文件传输信息中form-data内容段的长度信息,在文件传输信息中包含form-data内容段的长度信息时,根据form-data内容段的长度信息确定form-data内容段的结束位置。图3是本发明提供的客户端的结构图。如图3所示,该客户端包括信息组织模块301和文件上传模块302。信息组织模块301,用于组织文件传输信息,在文件传输信息中设置form-data内容段的长度信息。文件上传模块302,用于将所述文件传输信息上传给服务器。信息组织模块301,可以用于将所述form-data内容段的长度信息设置在文件传输信息的HTTP请求头的任意位置、或者设置在文件传输信息的form-data头描述的任意位置。信息组织模块301,可以用于将form-data内容段的长度信息设置在form-data头描述中的单独的form-data内容段长度信息字段中、或者设置在form-data头描述中的文件属性字段中。信息组织模块301,可以用于在文件传输信息中设置每个form-data内容段的长度信息,或者设置部分form-data内容段的长度信息。图4是本发明提供的服务器的结构图。如图4所示,该服务器包括接收模块401、查询模块402和结束位置确定模块403。
接收模块401,用于接收客户端上传的文件传输信息。查询模块402,用于查询该文件传输信息中是否包含form-data内容段的长度信
肩、O结束位置确定模块403,用于在文件传输信息中包含form-data内容段的长度信息时,根据form-data内容段的长度信息确定form-data内容段的结束位置。其中的查询模块402,可以用于对接收的HTTP请求进行HTTP协议头分析,判断该HTTP请求中是否包含form-data内容段,在该HTTP请求中包含form-data内容段时,查找出分隔符字符串的内容,根据分隔符字符串的内容,查找开始分隔符字符串,查找到开始分隔符字符串后,查找form-data内容段的头描述,在该头描述中,查找form-data内容段的长度信息。结束位置确定模块403,可以进一步用于在文件传输信息中不包含form-data 内容段的长度信息时,对所述文件传输信息进行字符串比较,根据该文件传输信息中的form-data内容段的结束标识字符确定form-data内容段的结束位置。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种文件传输方法,其特征在于,该方法包括 服务器接收客户端上传的文件传输信息,查询该文件传输信息中form-data内容段的长度信息,在文件传输信息中包含form-data内容段的长度信息时,服务器根据form-data内容段的长度信息确定form-data内容段的结束位置。
2.根据权利要求I所述的方法,其特征在于, 所述form-data内容段的长度信息设置在文件传输信息的HTTP请求头的任意位置、或者设置在文件传输信息的form-data头描述的任意位置。
3.根据权利要求2所述的方法,其特征在于,所述设置在文件传输信息的form-data头描述的任意位置包括 将form-data内容段的长度信息设置在form-data头描述中的单独的form-data内容段长度信息字段中、或者设置在form-data头描述中的文件属性字段中。
4.根据权利要求I所述的方法,其特征在于,所述form-data内容段的长度信息包括form-data实体内容的长度信息和/或form-data头描述和实体内容的总长度信息。
5.根据权利要求I所述的方法,其特征在于,所述form-data内容段的长度信息设置在文件传输信息的form-data头描述中, 所述查询该文件传输信息中form-data内容段的长度信息之前,该方法还包括 服务器对接收的HTTP请求进行HTTP协议头分析,判断该HTTP请求中是否包含form-data 内容段; 所述查询该文件传输信息中form-data内容段的长度信息包括 服务器对接收的HTTP请求进行HTTP协议头分析,查找出分隔符字符串的内容; 根据分隔符字符串的内容,查找开始分隔符字符串,查找到开始分隔符字符串后,查找form-data内容段的头描述,在该头描述中,查找form-data内容段的长度信息,根据所述长度信息直接定位到form-data内容段的结束分隔符字符串。
6.根据权利要求I所述的方法,其特征在于,该方法还包括 在文件传输信息中不包含form-data内容段的长度信息时,服务器对所述客户端上传的文件传输信息进行字符串比较,根据该文件传输信息中的form-data内容段的结束标识字符确定form-data内容段的结束位置。
7.一种文件传输系统,其特征在于,该系统包括客户端和服务器; 所述客户端,用于在文件传输信息中设置form-data内容段的长度信息,将该文件传输信息上传给服务器; 所述服务器,用于接收客户端上传的文件传输信息,查询该文件传输信息中form-data内容段的长度信息,在文件传输信息中包含form-data内容段的长度信息时,根据form-data内容段的长度信息确定form-data内容段的结束位置。
8.一种客户端,其特征在于,该客户端包括信息组织模块和文件上传模块; 所述信息组织模块,用于组织文件传输信息,在文件传输信息中设置form-data内容段的长度信息; 所述文件上传模块,用于将所述文件传输信息上传给服务器。
9.根据权利要求8所述的客户端,其特征在于, 所述信息组织模块,用于将所述form-data内容段的长度信息设置在文件传输信息的HTTP请求头的任意位置、或者设置在文件传输信息的form-data头描述的任意位置。
10.根据权利要求9所述的客户端,其特征在于, 所述信息组织模块,用于将form-data内容段的长度信息设置在form-data头描述中的单独的form-data内容段长度信息字段中、或者设置在form-data头描述中的文件属性字段中。
11.根据权利要求8所述的客户端,其特征在于, 所述信息组织模块,用于在文件传输信息中设置每个form-data内容段的长度信息,或者设置部分form-data内容段的长度信息。
12.一种服务器,其特征在于,该服务器包括接收模块、查询模块和结束位置确定模块; 所述接收模块,用于接收客户端上传的文件传输信息; 所述查询模块,用于查询该文件传输信息中是否包含form-data内容段的长度信息;所述结束位置确定模块,用于在文件传输信息中包含form-data内容段的长度信息时,根据form-data内容段的长度信息确定form-data内容段的结束位置。
13.根据权利要求12所述的服务器,其特征在于, 所述查询模块,用于对接收的HTTP请求进行HTTP协议头分析,判断该HTTP请求中是否包含form-data内容段,在该HTTP请求中包含form-data内容段时,查找出分隔符字符串的内容,根据分隔符字符串的内容,查找开始分隔符字符串,查找到开始分隔符字符串后,查找form-data内容段的头描述,在该头描述中,查找form-data内容段的长度信息。
14.根据权利要求12所述的服务器,其特征在于, 所述结束位置确定模块,进一步用于在文件传输信息中不包含form-data内容段的长度信息时,对所述文件传输信息进行字符串比较,根据该文件传输信息中的form-data内容段的结束标识字符确定form-data内容段的结束位置。
全文摘要
本发明实施例公开了一种文件传输方法、系统和装置。该方法包括服务器接收客户端上传的文件传输信息,查询该文件传输信息中是否包含form-data内容段的长度信息,在文件传输信息中包含form-data内容段的长度信息时,服务器根据form-data内容段的长度信息确定form-data内容段的结束位置。应用本发明能够降低服务器在处理客户端上传的文件传输信息时的CPU消耗。
文档编号H04L29/08GK102984190SQ20111026407
公开日2013年3月20日 申请日期2011年9月7日 优先权日2011年9月7日
发明者谢正彪, 吴昊 申请人:腾讯数码(天津)有限公司