一种文件上传方法及系统
技术领域
本发明涉及文件上传方法及系统。
背景技术
如图1所示,目前的分布式文件系统包括主控服务器和数据服务器。主控服务器用于管理文件属性,所述文件属性包括文件在数据服务器中存储的位置。数据服务器用于存储文件,即存储具体的文件内容。客户端是作为上传文件的请求者。例如,步骤1中,客户端向主控服务器申请创建文件,主控服务器检查所管理的文件信息,如果要创建的文件已存在,则返回文件内容所在的存储地址,否则,分配一个新的数据服务器上的存储地址,创建文件信息,并返回。输入:文件名,输出:文件存储所在数据服务器中的位置。步骤2中,客户端向步骤1中返回的数据服务器发送文件内容数据,数据服务器返回写入数据的大小。输入:文件名,文件内容,输出:文件大小。步骤3中,客户端更新主控服务器内文件大小为步骤2中实际写入的大小,主控服务器返回成功或者失败的标志。输入:文件名,文件大小,输出:成功或者失败。
如果多个客户端同时写一个文件,较后执行更新操作的客户端会覆盖之前的更新操作。导致之前的数据更新丢失。针对该问题,现有的解决方案主要是通过对文件加锁来实现,也就是在创建文件时,申请加锁,写完文件后,再释放锁。这种方案需要在服务器上管理大量的锁,消耗服务器的资源,而且为了管理这些锁的创建,回收,系统实现比较复杂,客户端异常崩溃后,这些锁无法正常释放,导致文件无法更新。
发明内容
本发明的目的在于提出一种文件上传方法及系统,其能解决并发更新时,文件内容被覆盖的问题。
为了达到上述目的,本发明所采用的技术方案如下:
一种文件上传方法,其包括以下步骤:
步骤1、客户端向主控服务器发送创建文件请求,所述创建文件请求具有文件名信息;
步骤2、主控服务器将创建文件请求的文件名与其预存的所有文件名进行比对,若没有预存的文件名与所述创建文件请求的文件名匹配,则执行步骤3,否则,执行步骤8;
步骤3、主控服务器向客户端发送一第一响应创建文件请求数据包,所述第一响应创建文件请求数据包包括新分配的数据服务器的文件存储地址和初始化的文件版本号,并对文件存储地址、初始化的文件版本号和文件名进行关联及保存;
步骤4、客户端根据预设的规则对所述初始化的文件版本号进行更新形成第一变更文件版本号,并向数据服务器发送保存文件请求,所述保存文件请求包括文件名、文件内容、文件存储地址、第一变更文件版本号和所述客户端的唯一识别号信息;
步骤5、数据服务器根据保存文件请求,创建并保存对应的文件,计算所述文件的数据大小,并将所述文件的数据大小信息发送给客户端;所述文件具有文件标识,所述文件标识由文件名、第一变更文件版本号和唯一识别号构成;
步骤6、客户端向主控服务器发送更新文件请求,所述更新文件请求具有数据大小信息和文件标识;
步骤7、主控服务器接收更新文件请求,将文件标识的文件名与其预存的文件名进行匹配得到与所述文件名关联的初始化的文件版本号,根据预设规则对关联的初始化的文件版本号进行更新形成第二变更文件版本号,将第一变更文件版本号与第二变更文件版本号进行比对,若相同,则接受所述第二变更文件版本号的更新以及将更新文件请求的数据大小与第二变更文件版本号进行关联,并向客户端发送操作成功信息,否则,拒绝所述第二变更文件版本号的更新,并向客户端发送操作失败信息;
步骤8、主控服务器向客户端发送一第二响应创建文件请求数据包,所述第二响应创建文件请求数据包包括与创建文件请求的文件名对应的数据服务器的文件存储地址和当前的文件版本号;所述主控服务器存储有与创建文件请求的文件名对应的文件存储地址、当前的文件版本号、唯一识别号、数据大小的关联信息;
步骤9、客户端根据预设的规则对所述当前的文件版本号进行更新形成第三变更文件版本号,并向数据服务器发送保存文件请求,所述保存文件请求包括文件名、文件内容、文件存储地址、第三变更文件版本号和所述客户端的唯一识别号信息;
步骤10、数据服务器根据保存文件请求,将文件存储地址指向的文件进行更新形成变更文件,计算变更文件的数据大小,并将变更文件的数据大小信息发送给客户端;变更文件的文件标识由文件名、第三变更文件版本号和唯一识别号构成;
步骤11、客户端向主控服务器发送更新文件请求,所述更新文件请求具有变更文件的数据大小信息和文件标识;
步骤12、主控服务器接收更新文件请求,将文件标识的文件名与其预存的文件名进行匹配得到与所述文件名关联的当前的文件版本号,根据预设规则对关联的当前的文件版本号进行更新形成第四变更文件版本号,将第三变更文件版本号与第四变更文件版本号进行比对,并且将与所述文件名关联的唯一识别号与更新文件请求的文件标识的唯一识别号进行比对,若二者均相同,则接受第四变更文件版本号的更新以及将变更文件的数据大小与第四变更文件版本号进行关联,并向客户端发送操作成功信息,否则,拒绝所述第四变更文件版本号的更新,并向客户端发送操作失败信息。
基于上述方法,本发明还提出一种文件上传系统,其包括以下模块:
创建请求模块,设于客户端,用于向主控服务器发送创建文件请求,所述创建文件请求具有文件名信息;
判断模块,设于主控服务器,用于将创建文件请求的文件名与其预存的所有文件名进行比对,若没有预存的文件名与所述创建文件请求的文件名匹配,则执行第一响应模块,否则,执行第二响应模块;
第一响应模块,设于主控服务器,用于向客户端发送一第一响应创建文件请求数据包,所述第一响应创建文件请求数据包包括新分配的数据服务器的文件存储地址和初始化的文件版本号,并对文件存储地址、初始化的文件版本号和文件名进行关联及保存;
第一版本变更模块,设于客户端,用于根据预设的规则对所述初始化的文件版本号进行更新形成第一变更文件版本号,并向数据服务器发送保存文件请求,所述保存文件请求包括文件名、文件内容、文件存储地址、第一变更文件版本号和所述客户端的唯一识别号信息;
第一保存模块,设于数据服务器,用于根据保存文件请求,创建并保存对应的文件,计算所述文件的数据大小,并将所述文件的数据大小信息发送给客户端;所述文件具有文件标识,所述文件标识由文件名、第一变更文件版本号和唯一识别号构成;
第一更新请求模块,设于客户端,用于向主控服务器发送更新文件请求,所述更新文件请求具有数据大小信息和文件标识;
第一接收模块,设于主控服务器,用于接收更新文件请求,将文件标识的文件名与其预存的文件名进行匹配得到与所述文件名关联的初始化的文件版本号,根据预设规则对关联的初始化的文件版本号进行更新形成第二变更文件版本号,将第一变更文件版本号与第二变更文件版本号进行比对,若相同,则接受所述第二变更文件版本号的更新以及将更新文件请求的数据大小与第二变更文件版本号进行关联,并向客户端发送操作成功信息,否则,拒绝所述第二变更文件版本号的更新,并向客户端发送操作失败信息;
第二响应模块,设于主控服务器,用于向客户端发送一第二响应创建文件请求数据包,所述第二响应创建文件请求数据包包括与创建文件请求的文件名对应的数据服务器的文件存储地址和当前的文件版本号;所述主控服务器存储有与创建文件请求的文件名对应的文件存储地址、当前的文件版本号、唯一识别号、数据大小的关联信息;
第二版本变更模块,设于客户端,用于根据预设的规则对所述当前的文件版本号进行更新形成第三变更文件版本号,并向数据服务器发送保存文件请求,所述保存文件请求包括文件名、文件内容、文件存储地址、第三变更文件版本号和所述客户端的唯一识别号信息;
第二保存模块,设于数据服务器,用于根据保存文件请求,将文件存储地址指向的文件进行更新形成变更文件,计算变更文件的数据大小,并将变更文件的数据大小信息发送给客户端;变更文件的文件标识由文件名、第三变更文件版本号和唯一识别号构成;
第二更新模块,设于客户端,用于向主控服务器发送更新文件请求,所述更新文件请求具有变更文件的数据大小信息和文件标识;
第二接收模块,设于主控服务器,用于接收更新文件请求,将文件标识的文件名与其预存的文件名进行匹配得到与所述文件名关联的当前的文件版本号,根据预设规则对关联的当前的文件版本号进行更新形成第四变更文件版本号,将第三变更文件版本号与第四变更文件版本号进行比对,并且将与所述文件名关联的唯一识别号与更新文件请求的文件标识的唯一识别号进行比对,若二者均相同,则接受第四变更文件版本号的更新以及将变更文件的数据大小与第四变更文件版本号进行关联,并向客户端发送操作成功信息,否则,拒绝所述第四变更文件版本号的更新,并向客户端发送操作失败信息。
本发明具有如下有益效果:
由于在文件中设置了文件版本号和唯一识别号,多个客户端的文件内容写到了不同的文件中,避免了写入过程中的文件冲突,在并发更新文件的过程中,只有一个客户端会更新成功,而其他的客户端则更新失败,解决了文件一致性的问题。
附图说明
图1为现有技术的分布式文件系统的结构示意图;
图2为本发明较佳实施例的文件上传方法的流程图;
图3为本发明较佳实施例的文件上传系统的结构示意图。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述。
如图2所示,一种文件上传方法,其包括以下步骤:
步骤S1、客户端向主控服务器发送创建文件请求,所述创建文件请求具有文件名信息;
步骤S2、主控服务器将创建文件请求的文件名与其预存的所有文件名进行比对,若没有预存的文件名与所述创建文件请求的文件名匹配,意味着是新文件,则执行步骤S3,否则,意味着是已有的文件,执行步骤S8。
步骤S3、主控服务器向客户端发送一第一响应创建文件请求数据包,所述第一响应创建文件请求数据包包括新分配的数据服务器的文件存储地址和初始化的文件版本号(例如,0),并对文件存储地址、初始化的文件版本号和文件名进行关联及保存;
步骤S4、客户端根据预设的规则(例如,规定每次文件的更新,都对文件版本号加1)对所述初始化的文件版本号进行更新形成第一变更文件版本号,并向数据服务器发送保存文件请求,所述保存文件请求包括文件名、文件内容、文件存储地址、第一变更文件版本号和所述客户端的唯一识别号(例如,客户端的SIM卡号、CPU号、注册账号等)信息;
步骤S5、数据服务器根据保存文件请求,创建并保存对应的文件,即根据文件存储地址,创建新的文件,并在新的文件中添加文件内容,然后计算所述文件的数据大小,并将所述文件的数据大小信息发送给客户端。所述文件具有文件标识,所述文件标识由文件名、第一变更文件版本号和唯一识别号构成。所述文件标识可作为所述文件的新的文件名,而且,文件标识可以在客户端形成,也可以在数据服务器中形成。
步骤S6、客户端向主控服务器发送更新文件请求,所述更新文件请求具有数据大小信息和文件标识。
步骤S7、主控服务器接收更新文件请求,将文件标识的文件名与其预存的文件名进行匹配得到与所述文件名关联的初始化的文件版本号,根据预设规则对关联的初始化的文件版本号进行更新形成第二变更文件版本号,将第一变更文件版本号与第二变更文件版本号进行比对,若相同,则接受所述第二变更文件版本号的更新以及将更新文件请求的数据大小与第二变更文件版本号进行关联,并向客户端发送操作成功信息,否则,拒绝所述第二变更文件版本号的更新,并向客户端发送操作失败信息。
步骤S8、主控服务器向客户端发送一第二响应创建文件请求数据包,所述第二响应创建文件请求数据包包括与创建文件请求的文件名对应的数据服务器的文件存储地址和当前的文件版本号;所述主控服务器存储有与创建文件请求的文件名对应的文件存储地址、当前的文件版本号、唯一识别号、数据大小的关联信息。
步骤S9、客户端根据预设的规则对所述当前的文件版本号进行更新形成第三变更文件版本号,并向数据服务器发送保存文件请求,所述保存文件请求包括文件名、文件内容、文件存储地址、第三变更文件版本号和所述客户端的唯一识别号信息。
步骤S10、数据服务器根据保存文件请求,将文件存储地址指向的文件进行更新形成变更文件,计算变更文件的数据大小,并将变更文件的数据大小信息发送给客户端;变更文件的文件标识由文件名、第三变更文件版本号和唯一识别号构成。
步骤S11、客户端向主控服务器发送更新文件请求,所述更新文件请求具有变更文件的数据大小信息和文件标识。
步骤S12、主控服务器接收更新文件请求,将文件标识的文件名与其预存的文件名进行匹配得到与所述文件名关联的当前的文件版本号,根据预设规则对关联的当前的文件版本号进行更新形成第四变更文件版本号,将第三变更文件版本号与第四变更文件版本号进行比对,并且将与所述文件名关联的唯一识别号与更新文件请求的文件标识的唯一识别号进行比对,若二者均相同,则接受第四变更文件版本号的更新以及将变更文件的数据大小与第四变更文件版本号进行关联,并向客户端发送操作成功信息,否则,拒绝所述第四变更文件版本号的更新,并向客户端发送操作失败信息。
当客户端收到的是操作失败信息后,主控服务器端不会马上对数据服务器中的对应的文件进行复原或删除,而是再调用其他控制服务器,对数据服务器中的对应的文件进行复原或删除。
在客户端读取文件时,向主控服务器发送读取文件请求,主控服务器返回相应文件的文件标识和文件存储地址给客户端,客户端根据文件标识和文件存储地址就可以从数据服务器中读取到相应的文件。
如图3所示,一种文件上传系统,其包括以下模块:
创建请求模块,设于客户端,用于向主控服务器发送创建文件请求,所述创建文件请求具有文件名信息;
判断模块,设于主控服务器,用于将创建文件请求的文件名与其预存的所有文件名进行比对,若没有预存的文件名与所述创建文件请求的文件名匹配,则执行第一响应模块,否则,执行第二响应模块;
第一响应模块,设于主控服务器,用于向客户端发送一第一响应创建文件请求数据包,所述第一响应创建文件请求数据包包括新分配的数据服务器的文件存储地址和初始化的文件版本号,并对文件存储地址、初始化的文件版本号和文件名进行关联及保存;
第一版本变更模块,设于客户端,用于根据预设的规则对所述初始化的文件版本号进行更新形成第一变更文件版本号,并向数据服务器发送保存文件请求,所述保存文件请求包括文件名、文件内容、文件存储地址、第一变更文件版本号和所述客户端的唯一识别号信息;
第一保存模块,设于数据服务器,用于根据保存文件请求,创建并保存对应的文件,计算所述文件的数据大小,并将所述文件的数据大小信息发送给客户端;所述文件具有文件标识,所述文件标识由文件名、第一变更文件版本号和唯一识别号构成;
第一更新请求模块,设于客户端,用于向主控服务器发送更新文件请求,所述更新文件请求具有数据大小信息和文件标识;
第一接收模块,设于主控服务器,用于接收更新文件请求,将文件标识的文件名与其预存的文件名进行匹配得到与所述文件名关联的初始化的文件版本号,根据预设规则对关联的初始化的文件版本号进行更新形成第二变更文件版本号,将第一变更文件版本号与第二变更文件版本号进行比对,若相同,则接受所述第二变更文件版本号的更新以及将更新文件请求的数据大小与第二变更文件版本号进行关联,并向客户端发送操作成功信息,否则,拒绝所述第二变更文件版本号的更新,并向客户端发送操作失败信息;
第二响应模块,设于主控服务器,用于向客户端发送一第二响应创建文件请求数据包,所述第二响应创建文件请求数据包包括与创建文件请求的文件名对应的数据服务器的文件存储地址和当前的文件版本号;所述主控服务器存储有与创建文件请求的文件名对应的文件存储地址、当前的文件版本号、唯一识别号、数据大小的关联信息;
第二版本变更模块,设于客户端,用于根据预设的规则对所述当前的文件版本号进行更新形成第三变更文件版本号,并向数据服务器发送保存文件请求,所述保存文件请求包括文件名、文件内容、文件存储地址、第三变更文件版本号和所述客户端的唯一识别号信息;
第二保存模块,设于数据服务器,用于根据保存文件请求,将文件存储地址指向的文件进行更新形成变更文件,计算变更文件的数据大小,并将变更文件的数据大小信息发送给客户端;变更文件的文件标识由文件名、第三变更文件版本号和唯一识别号构成;
第二更新模块,设于客户端,用于向主控服务器发送更新文件请求,所述更新文件请求具有变更文件的数据大小信息和文件标识;
第二接收模块,设于主控服务器,用于接收更新文件请求,将文件标识的文件名与其预存的文件名进行匹配得到与所述文件名关联的当前的文件版本号,根据预设规则对关联的当前的文件版本号进行更新形成第四变更文件版本号,将第三变更文件版本号与第四变更文件版本号进行比对,并且将与所述文件名关联的唯一识别号与更新文件请求的文件标识的唯一识别号进行比对,若二者均相同,则接受第四变更文件版本号的更新以及将变更文件的数据大小与第四变更文件版本号进行关联,并向客户端发送操作成功信息,否则,拒绝所述第四变更文件版本号的更新,并向客户端发送操作失败信息。
对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保护范围之内。