一种上传大文件的方法

文档序号:7795108阅读:491来源:国知局
一种上传大文件的方法
【专利摘要】一种上传大文件的方法,该方法用于WEBDAV服务器,如果http服务器接收到WEBDAV服务器的上传请求,则判断上传文件的大小,如果上传文件的大小超过1M,则WEBDAV模块直接使用外部存储设备接收并储存上传文件。本发明对于大文件的上传用直接写外部存储介质的方法来代替原有的用物理内存暂存的方法,从而解决了上传文件大小受限的瓶颈问题。
【专利说明】一种上传大文件的方法
【技术领域】
[0001]本发明涉及一种上传大文件的方法,尤其涉及一种在WEBDAV服务器上实现上传大文件的方法。
【背景技术】
[0002]WEBDAV (Web-based Distributed Authoring and Versioning)是一种基于 HTTP1.1协议的通信协议。它扩展了 HTTP 1.1,在GET、P0ST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对Web服务器直接读写,并支持写文件锁定及解锁,还可以支持文件的版本控制。
[0003]WEBDAV作为一种文件共享的方案,已经在网关设备的某些开源方案(openwrt)上开始应用。典型的应用场景为:网关设备上部署WEBDAV服务器,将外接的存储设备(移动硬盘)作为存储介质,PC (个人电脑)、手机等终端通过客户端或映射网络驱动器的方法,可以下载或上传文件,在用映射网络驱动器的方法连接时可以直接修改服务器上的文件。
[0004]Lighttpd (Iighttpd是一个用C语言实现的轻量级的http服务器,HTTP (HyperText Transfer Protocol)即超文本传输协议,是目前网页传输的通用协议)是个框架,在这个框架下可以同时做多种服务,比如:建立一个WEBDAV的服务器用于共享文件,同时建立一个WEB服务器,用于管理网关设备,也可以再建立一个WEB服务器做BBS。
[0005]在网关设备上可以用http服务器加载WEBDAV模块的方式实现WEBDAV服务器。但在实际使用中,WEBDAV服务器不能上传较大的文件,32M内存的设备一般不能上传大于20M的文件。
[0006]http服务器处理上传文件请求的步骤如下:
1、先从socket (网络套接字)中接收http header (http header是http报文的头部。可以将http报文当成是一个连续的字符串,该字符串可以分为两部分:头部(字符串前面的一部分,长度不定)和内容(剩余的部分)。头部包含一些协议描述和控制的信息,内容部分是http协议需要传送的内容),根据上传请求的内容长度(Content-Length)字段的值获得接收文件的大小;
步骤2、对于小于等于64K的文件,直接分配一个内存缓存(buffer)来接收;对于大于64K小于等于IM的文件,在tmpfs (临时文件系统,是一种基于内存的文件系统,它只存在于内存中)中建立一个临时文件来存储;对于大于IM的文件,将文件分成以IM为单位的临时文件存储在临时文件中,并用链表将这些临时文件的信息保存起来;
步骤3、文件接收完成后,交给WEBDAV模块处理,WEBDAV模块将接收到的文件写入对应的外部存储介质中。
[0007]网关设备的剩余内存一般不会小于1M,所以对于IM左右的文件,一般都可以上传。但当文件很大时,由于临时文件都是存储在物理内存中的,所以当上传文件的大小大于系统剩余物理内存时,Iighttpd最终会因内存不够而放弃接收该文件,导致上传失败。
[0008]现有的上传文件方案对上传文件的大小有限制,这是由原始设计的上传机制决定的,上传文件大小的上限为当前系统中剩余物理内存的大小。这就给实际应用带来了不便,尤其是无法上传视频文件。
[0009]目前业界还没有对应的解决方案。

【发明内容】

[0010]本发明提供一种上传大文件的方法,不受系统实际剩余物理内存的限制,实现对大文件的支持。
[0011]为了达到上述目的,本发明提供一种上传大文件的方法,该方法用于WEBDAV服务器,该方法包含以下步骤:
步骤S1、如果http服务器接收到WEBDAV服务器的上传请求,则判断上传文件的大小;步骤S2、如果上传文件的大小超过1M,WEBDAV模块直接使用外部存储设备接收并储存上传文件。
[0012]所述的步骤SI中,http服务器根据接收到的http报文头部,判断是否是WEBDAV服务器的上传请求,如果是,就将在http连接上下文中扩充的标识变量赋值为真,表示http服务器要处理WEBDAV服务器的上传服务,如果不是,则将该标识变量赋值为假。
[0013]在上传文件的大小超过IM时,在WEBDAV模块直接使用外部存储设备接收并储存上传文件之前,还包括:http服务器先判断http连接上下文中扩充的标识变量的赋值,如果赋值为真,则WEBDAV模块直接使用外部存储设备接收并储存上传文件。
[0014]所述的http报文头部的内容包含超文本传送协议方法和请求路径。
[0015]所述的步骤S2中,外部存储设备为移动硬盘,或者电脑,或者手机。
[0016]所述的步骤S2中,WEBDAV模块直接使用外部存储设备储存上传文件的步骤包含以下步骤:
步骤S2.1、WEBDAV模块根据http报文头部中的请求路径确定上传文件在外部储存设备中的存储路径,在该路径下建立并打开一个文件名为“上传文件名+tmp”的临时文件,返回临时文件句柄;
步骤S2.2,http服务器从接收到的网络套接字socket中读取上传文件的内容,并根据返回的所述临时文字句柄将所述上传文件的内容写入所述临时文件中;
步骤S2.3、上传文件接收完成后,http服务器关闭临时文件句柄。
[0017]所述的步骤S2中,如果上传文件的大小未超过1M,则对于小于等于64K的文件,WEBDAV模块直接分配一个内存缓存来接收,对于大于64K小于等于IM的文件,WEBDAV模块在临时文件系统中建立一个临时文件来存储。
[0018]在执行步骤S2之后,所述的上传大文件的方法还包含:步骤S3、保存校验,即对所述上传文件进行保存,并对上传过程进行校验。
[0019]所述的步骤S3包含以下步骤:
步骤S3.1、上传文件接收完成后,WEBDAV模块判断所述上传文件的大小,对于小于等于IM的文件,WEBDAV模块直接将接收到的文件写入对应的外部存储设备中,对于大于IM的文件,进行步骤S3.2 ;
步骤S3.2、http服务器判断http连接上下文中扩充的标识变量的赋值,如果赋值为假,表示文件上传过程中出现系统或硬件错误,上传不成功,返回错误报告,如果赋值为真,进行步骤S3.3 ;
步骤S3.3、WEBDAV模块根据上传文件的文件名,在外部存储设备中的指定目录路径下查找对应的临时文件,如果临时文件不存在或临时文件的大小和上传请求中的内容长度不一致,则表明上传过程中出现系统或硬件错误,返回错误报告,如果临时文件存在且临时文件的大小和上传请求的内容长度一致,则将临时文件重命名为目标文件。
[0020]在将临时文件重命名为目标文件时,若外部存储设备中已存在与所述目标文件的文件名相同的文件,则先删除外部存储设备中已存在的与所述目标文件的文件名相同的文件,再将所述临时文件重命名为目标文件。
[0021]本发明对于大文件的上传用直接写外部存储介质的方法来代替原有的用物理内存暂存的方法,从而解决了上传文件大小受限的瓶颈问题。
【专利附图】

【附图说明】
[0022]图1是本发明的流程图。
【具体实施方式】
[0023]以下根据图1,具体说明本发明的较佳实施例。
[0024]如图1所示,本发明提供一种实现WEBDAV服务器上传大文件的方法,该方法包含以下步骤:
步骤l、http服务器根据http报文头部中的超文本传送协议方法(http method)和请求路径,判断是否是WEBDAV服务器的上传请求,如果是,就将在http连接上下文中扩充的标识变量赋值为真,如果不是,则将该标识变量赋值为假;
步骤2、http服务器判断上传文件的大小,如果小于等于1M,进行步骤3,如果大于1M,进行步骤4 ;
步骤3、对于小于等于64K的文件,WEBDAV模块直接分配一个内存缓存(buffer)来接收,对于大于64K小于等于IM的文件,WEBDAV模块在临时文件系统tmpfs中建立一个临时文件来存储,进行步骤6;
步骤4、http服务器判断http连接上下文中扩充的标识变量的赋值,如果赋值为真,进行步骤5 ;
如果http连接上下文中扩充的标识变量赋值为真,表示http服务器要处理WEBDAV服务器的上传服务,如果http连接上下文中扩充的标识变量赋值为假,则表示http服务器不需要处理WEBDAV服务器的上传服务,http服务器保证其他服务(比如:用于管理网关设备的WEB服务器,用作BBS的WEB服务器等)的处理流程不变,保证其他服务的功能不受影响;步骤5、WEBDAV模块直接使用外部存储设备储存上传文件;
该步骤5包含以下步骤:
步骤5.1、WEBDAV模块根据http报文头部中的请求路径确定上传文件在外部储存设备中的存储路径,在该路径下建立并打开一个文件名为“上传文件名+tmp”的临时文件,返回临时文件句柄;
步骤5.2、http服务器从接收到的网络套接字socket中读取上传文件的内容,并根据步骤5.1返回的所述临时文字句柄将所述上传文件的内容写入所述临时文件中; 步骤5.3、上传文件接收完成后,http服务器关闭临时文件句柄;
步骤6、上传文件接收完成后,WEBDAV模块判断上传文件的大小,如果小于等于1M,进行步骤7,如果大于1M,进行步骤8 ;
步骤7、WEBDAV模块直接将接收到的文件写入对应的外部存储设备中;
步骤8、http服务器判断http连接上下文中扩充的标识变量的赋值,如果赋值为真,进行步骤10,如果赋值为假,进行步骤9 ;
步骤9、表示文件上传过程中出现系统或硬件错误,上传不成功,返回错误报告;
步骤10、WEBDAV模块根据上传文件的文件名,在外部存储设备中的指定目录路径下查找对应的临时文件,如果临时文件不存在或临时文件的大小和上传请求中的内容长度不一致,则表明上传过程中出现系统或硬件错误,返回错误报告,如果临时文件存在且临时文件的大小和上传请求的内容长度一致,则将临时文件重命名为目标文件。
[0025]在将临时文件重命名为目标文件时,若外部存储设备中已存在与所述目标文件的文件名相同的文件,则先删除外部存储设备中已存在的与所述目标文件的文件名相同的文件,再将所述临时文件重命名为目标文件。
[0026]本发明对于大文件用写外部存储介质的方法来代替原有的用物理内存暂存的方法,从而解决了上传文件大小受限的瓶颈问题。
[0027]尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
【权利要求】
1.一种上传大文件的方法,该方法用于WEBDAV服务器,其特征在于,该方法包含以下步骤: 步骤S1、如果http服务器接收到WEBDAV服务器的上传请求,则判断上传文件的大小; 步骤S2、如果上传文件的大小超过1M,WEBDAV模块直接使用外部存储设备接收并储存上传文件。
2.如权利要求1所述的上传大文件的方法,其特征在于,所述的步骤SI中,http服务器根据接收到的http报文头部,判断是否是WEBDAV服务器的上传请求,如果是,就将在http连接上下文中扩充的标识变量赋值为真,表示http服务器要处理WEBDAV服务器的上传服务,如果不是,则将该标识变量赋值为假。
3.如权利要求2所述的上传大文件的方法,其特征在于,在上传文件的大小超过IM时,在WEBDAV模块直接使用外部存储设备接收并储存上传文件之前,还包括:http服务器先判断http连接上下文中扩充的标识变量的赋值,如果赋值为真,则WEBDAV模块直接使用外部存储设备接收并储存上传文件。
4.如权利要求2所述的上传大文件的方法,其特征在于,所述的http报文头部的内容包含超文本传送协议方法和请求路径。
5.如权利要求1所述的上传大文件的方法,其特征在于,所述的步骤S2中,外部存储设备为移动硬盘,或者电脑,或者手机。
6.如权利要求1所述的上传大文件的方法,其特征在于,所述的步骤S2中,WEBDAV模块直接使用外部存储设备储存上传文件的步骤包含以下步骤: 步骤S2.1、WEBDAV模块根据http报文头部中的请求路径确定上传文件在外部储存设备中的存储路径,在该路径下建立并打开一个文件名为“上传文件名+tmp”的临时文件,返回临时文件句柄; 步骤S2.2,http服务器从接收到的网络套接字socket中读取上传文件的内容,并根据返回的所述临时文字句柄将所述上传文件的内容写入所述临时文件中; 步骤S2.3、上传文件接收完成后,http服务器关闭临时文件句柄。
7.如权利要求2所述的上传大文件的方法,其特征在于,所述的步骤S2中,如果上传文件的大小未超过1M,则对于小于等于64K的文件,WEBDAV模块直接分配一个内存缓存来接收,对于大于64K小于等于IM的文件,WEBDAV模块在临时文件系统中建立一个临时文件来存储。
8.如权利要求7所述的上传大文件的方法,其特征在于,在执行步骤S2之后,所述的上传大文件的方法还包含:步骤S3、保存校验,即对所述上传文件进行保存,并对上传过程进行校验。
9.如权利要求8所述的上传大文件的方法,其特征在于,所述的步骤S3包含以下步骤: 步骤S3.1、上传文件接收完成后,WEBDAV模块判断所述上传文件的大小,对于小于等于IM的文件,WEBDAV模块直接将接收到的文件写入对应的外部存储设备中,对于大于IM的文件,进行步骤S3.2 ; 步骤S3.2、http服务器判断http连接上下文中扩充的标识变量的赋值,如果赋值为假,表示文件上传过程中出现系统或硬件错误,上传不成功,返回错误报告,如果赋值为真,进行步骤S3.3 ; 步骤S3.3、WEBDAV模块根据上传文件的文件名,在外部存储设备中的指定目录路径下查找对应的临时文件,如果临时文件不存在或临时文件的大小和上传请求中的内容长度不一致,则表明上传过程中出现系统或硬件错误,返回错误报告,如果临时文件存在且临时文件的大小和上传请求的内容长度一致,则将临时文件重命名为目标文件。
10.如权利要求9所述的上传大文件的方法,其特征在于,在将临时文件重命名为目标文件时,若外部存储设备中已存在与所述目标文件的文件名相同的文件,则先删除外部存储设备中已存 在的与所述目标文件的文件名相同的文件,再将所述临时文件重命名为目标文件。
【文档编号】H04L29/08GK103701937SQ201410015196
【公开日】2014年4月2日 申请日期:2014年1月14日 优先权日:2014年1月14日
【发明者】管建智 申请人:上海斐讯数据通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1