CN103685332B - 文件上传方法、客户端、服务器及系统 - Google Patents
文件上传方法、客户端、服务器及系统 Download PDFInfo
- Publication number
- CN103685332B CN103685332B CN201210318768.4A CN201210318768A CN103685332B CN 103685332 B CN103685332 B CN 103685332B CN 201210318768 A CN201210318768 A CN 201210318768A CN 103685332 B CN103685332 B CN 103685332B
- Authority
- CN
- China
- Prior art keywords
- file
- upload
- client
- data
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种文件上传方法、客户端、服务器及系统,属于互联网通信领域。所述方法包括:接收客户端在一次上传任务中发送的数据上传请求,所述数据上传请求用于请求上传一个文件的全部或者部分数据;判断同时在上传所述文件的其它上传任务是否已经上传完毕;如果是,则向所述客户端发送所述文件上传完毕的消息;如果否,则接收所述数据并存储。本发明通过服务器在接收到客户端的数据上传请求时,判断同时在上传所述文件的其它上传任务是否已经上传完毕,来选择完成本次上传任务或者继续接收数据,达到了文件上传冲突时,服务器总是只存储一份文件,而且只要有一个客户端上传该文件成功,则其他客户端无需继续上传从而节省了上传流量的效果。
Description
技术领域
本发明涉及互联网通信领域,特别涉及一种文件上传方法、客户端、服务器及系统。
背景技术
文件上传是指客户端将自身存储的文件利用有线或者无线网络上传到服务器中进行存储的过程,是互联网用户常用的功能之一。
在文件上传过程中,可能会出现同时上传两个相同的文件的上传冲突现象,比如,用户首先上传一个文件A,然后在文件A的上传过程还未结束时,再次上传文件A的现象。为了解决这种上传冲突现象,现有的文件上传方法包括:第一,客户端向服务器发送文件上传请求,用于请求上传文件A;第二,服务器接收该文件上传请求,然后与客户端建立任务1用于上传文件A;第三,在任务1正在进行过程中或者暂停过程中,客户端再次向服务器发送文件上传请求,用于请求上传文件A;第四,服务器接收该文件上传请求,然后与客户端建立任务2用于上传文件A,但服务器丢弃此次文件A的上传内容,先拷贝任务1中文件A的已上传内容到任务2相应的存储位置,并向客户端响应目前文件A的已上传部分的偏移位置;第五,客户端收到响应后从偏移位置开始继续上传文件A的后续部分。此时任务1和任务2是并行的两个任务,各自的上传过程互不冲突,服务器存储的是该用户不同时刻上传的两份内容一样的文件A。另外,在上传文件A的过程中,通常客户端都将文件A分割为多个数据包依次上传,每次上传一个数据包时,都需要向服务器发送一次数据上传请求。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:虽然在任务2中采用从偏移位置开始继续上传文件A的技术手段,可以节省客户端的上传流量,但是实质上服务器仍然存储了两份一模一样的文件A,也即服务器耗费了2倍于文件A的文件大小的存储空间,同时客户端在上传过程中耗费了最少1倍、最多2倍于文件A的文件大小的上传流量。当服务器为云存储平台和/或客户端是移动终端时,现有技术对存储空间和上传流量的耗费是比较多的。
发明内容
为了解决现有技术对存储空间和上传流量耗费较多的问题,本发明实施例提供了一种文件上传方法、客户端、服务器及系统。所述技术方案如下:
一个方面,提供了一种文件上传方法,所述方法包括:
接收客户端在一次上传任务中发送的数据上传请求,所述数据上传请求用于请求上传一个文件的全部或者部分数据;
判断同时在上传所述文件的其它上传任务是否已经上传完毕;
如果是,则向所述客户端发送所述文件上传完毕的消息;
如果否,则接收所述数据并存储。
进一步地,所述接收客户端在一次上传任务中发送的数据上传请求之前,还包括:
接收客户端发送的所述文件的内容标识信息;
根据所述文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件;
如果是,向所述客户端发送第一响应消息,所述第一响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分;
如果否,向所述客户端发送第二响应消息,以便所述客户端上传所述文件。
进一步地,所述数据上传请求用于请求上传一个文件的部分数据,
在判断到同时在上传所述文件的其它上传任务还未上传完毕之后,所述接收所述数据并存储之前,还包括:
判断同时在上传所述文件的其它上传任务中所述文件的已上传部分是否已经包含所述客户端请求上传的部分数据;
如果是,则向所述客户端发送第三响应消息,所述第三响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分;
如果否,则执行所述接收所述数据并存储的步骤。
进一步地,所述数据上传请求用于请求上传一个文件的部分数据,
所述接收所述数据并存储之后,还包括:
检测所述部分数据是否为所述文件的最后部分:
若所述部分数据是所述文件的最后部分,则将所述文件的所有数据存储至同一存储位置,并且生成所述文件的存储位置与所述文件的文件内容的标识信息之间的对应关系。
进一步地,所述接收客户端发送的所述文件的内容标识信息之后,还包括:
生成与所述文件的内容标识信息所对应的提取码,并存储所述文件的内容标识信息和所述提取码之间的对应关系;
所述向所述客户端发送第一响应消息,对应包括:
向所述客户端发送还携带有所述提取码的第一响应消息,以便所述客户端在上传所述文件之后,根据所述提取码下载所述文件;
所述向所述客户端发送第二响应消息,对应包括:
向所述客户端发送携带有所述提取码的第二响应消息,以便所述客户端在上传所述文件之后,根据所述提取码下载所述文件。
进一步地,若其它上传任务为两个或者两个以上,则所述其它上传任务中所述文件的已上传部分的偏移位置为:
所述其它上传任务中最早的上传任务所对应的所述文件的已上传部分的偏移位置;
或者,所述其它上传任务中上传进度最快的上传任务所对应的所述文件的已上传部分的偏移位置。
另一方面,提供了一种服务器,所述服务器包括:
请求接收模块,用于接收客户端在一次上传任务中发送的数据上传请求,所述数据上传请求用于请求上传一个文件的全部或者部分数据;
任务判断模块,用于判断同时在上传所述文件的其它上传任务是否已经上传完毕;
完毕反馈模块,用于如果所述任务判断模块的判断结果为是,则向所述客户端发送所述文件上传完毕的消息;
数据存储模块,用于如果所述任务判断模块的判断结果为否,则接收所述数据并存储。
进一步地,所述服务器,还包括:
标识接收模块、冲突检测模块、第一响应模块和第二响应模块;
所述标识接收模块,用于接收客户端发送的所述文件的内容标识信息;
所述冲突检测模块,用于根据所述文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件;
所述第一响应模块,用于如果所述冲突检测模块的判断结果为是,则向所述客户端发送第一响应消息,所述第一响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分;
所述第二响应模块,用于如果所述冲突检测模块的判断结果为否,则向所述客户端发送第二响应消息,以便所述客户端上传所述文件。
进一步地,所述请求接收模块接收到的数据上传请求用于请求上传一个文件的部分数据,
所述数据存储模块,具体包括:重复判断单元、第三响应单元和数据存储单元;
所述重复判断单元,用于判断同时在上传所述文件的其它上传任务中所述文件的已上传部分是否已经包含所述客户端请求上传的部分数据;
所述第三响应单元,用于如果所述重复判断单元的判断结果为是,则向所述客户端发送第三响应消息,所述第三响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分;
所述数据存储单元,用于如果所述重复判断单元的判断结果为否,则执行所述接收所述数据并存储的步骤。
进一步地,所述请求接收模块接收到的数据上传请求用于请求上传一个文件的部分数据,
所述服务器,还包括:
数据检测模块和关系生成模块;
所述数据检测模块,用于检测所述数据存储模块存储的部分数据是否为所述文件的最后部分:
所述关系生成模块,用于若所述数据检测模块检测到部分数据是所述文件的最后部分,则将所述文件的所有数据存储至同一存储位置,并且生成所述文件的存储位置与所述文件的文件内容的标识信息之间的对应关系。
进一步地,所述服务器,还包括:
提取码生成模块;
所述提取码生成模块,用于生成与所述文件的内容标识信息所对应的提取码,并存储所述文件的内容标识信息和所述提取码之间的对应关系;
所述第一响应模块,具体用于向所述客户端发送还携带有所述提取码的第一响应消息,以便所述客户端在上传所述文件之后,根据所述提取码下载所述文件;
所述第二响应模块,具体用于向所述客户端发送携带有所述提取码的第二响应消息,以便所述客户端在上传所述文件之后,根据所述提取码下载所述文件。
进一步地,若其它上传任务为两个或者两个以上,则所述其它上传任务中所述文件的已上传部分的偏移位置为:
所述其它上传任务中最早的上传任务所对应的所述文件的已上传部分的偏移位置;
或者,所述其它上传任务中上传进度最快的上传任务所对应的所述文件的已上传部分的偏移位置。
再一方面,提供了一种客户端,包括:
请求发送模块,用于向服务器发送数据上传请求,所述数据上传请求用于请求上传一个文件的全部或者部分数据;
停止发送模块,用于在接收到所述服务器发送的所述文件上传完毕的消息时,停止发送所述文件的全部或者部分数据;
正常发送模块,用于在未接收到所述服务器发送的所述文件上传完毕的消息时,发送所述文件的全部或者部分数据。
进一步地,所述客户端,还包括:
标识发送模块和第一接收模块;
所述标识发送模块,用于向所述服务器发送所述文件的内容标识消息,以便所述服务器根据所述文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件;
所述第一接收模块,用于接收所述服务器在判断到存在其它上传任务正在上传相同的文件之后发送的第一响应消息,所述第一响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置;
所述请求发送模块,具体用于在第一接收模块接收到第一响应消息之后,向服务器发送数据上传请求,所述数据上传请求用于请求上传所述文件中从所述偏移位置开始的部分数据。
所述第二接收模块,用于接收所述服务器在根据所述标识发送模块512发送的所述文件的内容标识信息判断到不存在其它上传任务正在上传相同的文件之后发送的第二响应消息;
所述请求发送模块,具体用于在第二接收模块接收到第二响应消息之后,向服务器发送数据上传请求,所述数据上传请求用于请求上传所述文件中从文件头开始的部分数据。
进一步地,所述客户端,还包括:
第三接收模块;
所述第三接收模块,用于接收所述服务器在判断到其它上传任务中所述文件的已上传部分是否已经包含客户端请求上传的部分数据之后发送的第三响应消息,所述第三响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置;
所述请求发送模块,还用于向所述服务器再次发送数据上传请求,所述数据上传请求用于请求上传所述文件中从所述偏移位置开始的部分数据。
进一步地,所述客户端,还包括:
提取码接收模块,用于接收所述服务器发送的提取码;
下载请求发送模块,用于根据所述提取码向所述服务器发送文件下载请求。
又一方面,提供了一种文件上传系统,其包括如上另一方面所述的服务器和如上再一方面所述的客户端。
本发明实施例提供的技术方案带来的有益效果是:
通过在接收到客户端的数据上传请求时,判断同时在上传所述文件的其它上传任务是否已经上传完毕,来选择完成本次上传任务或者继续接收数据,解决了现有技术对存储空间和上传流量耗费较多的问题,达到了在相同或者不同的客户端同时上传同一文件而导致冲突问题时,服务器总是只存储一份该文件,而且只要有一个客户端上传该文件成功,则其他客户端无需继续上传该文件,从而节省了其他客户端的上传流量的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明实施例提供的一种实施环境的结构示意图;
图2是本发明实施例一提供的文件上传方法的方法流程图;
图3是本发明实施例二提供的文件上传方法的方法流程图;
图4是本发明实施例三提供的文件上传方法的方法流程图;
图5是本发明实施例四提供的服务器的结构方框图;
图6是本发明实施例五提供的服务器的结构方框图;
图7是本发明实施例六提供的服务器的结构方框图;
图8是本发明实施例七提供的客户端的结构方框图;
图9是本发明实施例八提供的客户端的结构方框图;
图10是本发明实施例九提供的文件上传系统的结构方框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图1,其示出了本发明实施例提供的一种实施环境的结构示意图。该实施环境包括服务器120和客户端140。
服务器120可以是具有文件存储能力的计算机,比如,可以是云存储平台中的一部分。
客户端140可以是诸如笔记本电脑、台式电脑之类的终端,也可以是智能手机、平板电脑或者电子书阅读器之类的移动终端。在本文件上传系统中,客户端140可以为多个,每个客户端140可以通过有线或者无线网络分别与服务器120相连。
实施例一
请参考图2,其示出了本发明实施例一提供的文件上传方法的方法流程图。本实施例主要以该文件上传方法应用于图1所示服务器120中来举例说明,该文件上传方法用于多个上传任务同时上传同一文件时的文件上传过程,该文件上传方法包括:
步骤102,接收客户端在一次上传任务中发送的数据上传请求,该数据上传请求用于请求上传一个文件的全部或者部分数据;
服务器可以接收客户端在一次上传任务中发送的数据上传请求,该数据上传请求用于请求上传一个文件的全部或者部分数据。通常来讲,当客户端向服务器上传一个文件时,会将该文件分割为多个相同或者不同大小的数据块来分别上传给服务器,在每次上传一个数据包时,客户端都会向服务器发送一个数据上传请求。
当然,在一些实施例中,比如文件的数据量很小时,客户端可以直接请求传输该文件的全部数据,而不需要将该文件分割为很多个数据包。
步骤104,判断同时在上传该文件的其它上传任务是否已经上传完毕;如果是,则进入步骤106;如果否,则进入步骤108;
在同时存在上传该文件的其它上传任务时,服务器在接收到该客户端的数据上传请求之后,服务器可以判断同时在上传该文件的其它上传任务是否已经将该文件上传完毕。比如,服务器接收到客户端1在上传任务1中发送的数据上传请求,该数据上传请求用于请求文件A的第3个数据包,在同时存在上传该文件的上传任务2时,服务器可以判断同时在上传该文件的上传任务2是否已经将文件A上传完毕。
步骤106,向客户端发送该文件上传完毕的消息;
如果服务器判断到同时上传该文件的上传任务2已经将文件A上传完毕,则向客户端发送文件A上传完毕的消息,也即表示客户端无需继续上传文件A的数据。
步骤108,接收数据并存储。
如果服务器判断到同时上传该文件的上传任务2还未将文件A上传完毕,则接收客户端请求上传的数据并存储。
同理,如果服务器接收到客户端2在上传任务2中发送的数据上传请求时,则服务器判断同时上传该文件的上传任务1是否已经将文件A上传完毕。另外,在一些实施例中,上传任务1和上传任务2也可以都由一个客户端建立。
综上所述,本实施例提供的文件上传方法,通过在接收到客户端的数据上传请求时,判断同时在上传所述文件的其它上传任务是否已经上传完毕,来选择完成本次上传任务或者继续接收数据,解决了现有技术对存储空间和上传流量耗费较多的问题,达到了在相同或者不同的客户端同时上传同一文件而导致冲突问题时,服务器总是只存储一份该文件,而且只要有一个客户端上传该文件成功,则其他客户端无需继续上传该文件,从而节省了其他客户端的上传流量的效果。
实施例二
请参考图3,其示出了本发明实施例二提供的文件上传方法的方法流程图。本实施例主要以该文件上传方法应用于图1所示的服务器中来举例说明,该文件上传方法用于多个上传任务同时上传同一文件时的文件上传过程,该文件上传方法包括:
步骤202,接收客户端发送的文件的内容标识信息;
在客户端需要上传文件时,客户端向服务器发送文件上传请求,该文件上传请求携带有该文件的内容标识信息,比如该文件的MD5(Message Digest AlgorithmMD5,消息摘要算法第五版)值。由于文件的内容标识信息是根据文件包括的内容获取得到的,所以相同的文件具有相同的内容标识信息,不同的文件具有不同的内容标识信息。
该文件上传请求还可以携带有文件的文件信息和客户端的标识信息,其中,文件信息可以包括文件名、文件格式和文件大小之类的信息;客户端的标识信息可以是一组用户名或者密码、IMEI(International Mobile Equipment Identity,国际移动设备身份码)、UUID(Universally Unique Identifier,通用唯一识别码)或者GUID(GloballyUnique Identifier,全球唯一标识符)。
需要说明的是,文件上传请求可以用于请求上传不止一个文件,比如,一个文件上传请求中同时请求上传三个文件。但在本文中,为了简化描述,均以一个文件上传请求用于请求上传一个文件为例来进行描述。
步骤204,根据文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件;如果是,则进入步骤206;如果否,则进入步骤208;
服务器在接收客户端发送的文件上传请求之后,服务器根据该文件上传请求中携带的文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件,比如,服务器可以判断正在进行的上传任务中,是否存在上传任务正在上传与该内容标识信息相对应的文件。
易于思及的,服务器在进行本步骤之前,也可以先根据该文件的内容标识信息判断本地是否已经存储有该文件,如果是,则直接进入步骤214;如果否,再执行本步骤。
步骤206,向客户端发送第一响应消息,第一响应消息携带有其它上传任务中该文件的已上传部分的偏移位置,以便客户端上传该文件中的未上传部分;
如果服务器判断到存在其它上传任务正在上传该文件,则服务器向客户端发送第一响应消息,第一响应消息携带有其它上传任务中该文件的已上传部分的偏移位置。具体地讲,该文件的已上传部分的偏移位置是指该文件的已上传数据在全部数据中相对于文件头的偏移位置,比如,文件的大小为108KB,该文件的已上传数据为80KB,则该文件的已上传数据在全部数据中相对于文件头的偏移位置为80KB。此后,客户端可以从相对于该文件的文件头偏移80KB的位置开始,继续上传该文件的剩余数据,也即该文件中的未上传部分。
由于除了本次上传任务,同时在上传该文件的其它上传任务可能为两个或者两个以上,此时,该文件的已上传部分的偏移位置可以是其它上传任务中最早的上传任务所对应的该文件的已上传部分的偏移位置,比如,本次上传任务是任务3,则服务器反馈向客户端反馈的该文件的已上传部分的偏移位置是任务1中该文件的已上传部分的偏移位置;该文件的已上传部分的偏移位置也可以是其它上传任务中上传进度最快的上传任务所对应的该文件的已上传部分的偏移位置,本次上传任务是任务3,任务1和任务2相比,任务2中该文件的已上传部分更多,则服务器反馈向客户端反馈的该文件的已上传部分的偏移位置是任务2中该文件的已上传部分的偏移位置。
在具体实现时,服务器可以按照文件的内容标识信息为索引,记录每个文件的已上传部分的偏移位置,一种情况下,服务器可以仅记录上传该文件的第一个上传任务中该文件的已上传部分的偏移位置,比如,服务器每次接收到任务1对于该文件上传的一个数据包时,更新该文件的已上传部分的偏移位置;另一种情况下,服务器可以同时记录每个上传该文件的上传任务中该文件的已上传部分的偏移位置,比如,服务器每次接收完毕一个上传任务对于该文件上传的一个数据包时,判断记录中的该文件的已上传部分是否包含了该数据包,如果不包含,则该文件的已上传部分的偏移位置更新为该数据包的结束位置。
此后,服务器与客户端建立上传任务,开始协作上传该文件。
步骤208,向客户端发送第二响应消息,以便客户端上传该文件。
如果服务器判断到不存在其它上传任务正在上传该文件,则向客户端发送第二响应消息,以便客户端上传该文件。
此后,服务器与客户端建立上传任务,开始协作上传该文件。
步骤210,接收客户端在一次上传任务中发送的数据上传请求,该数据上传请求用于请求上传一个文件的全部或者部分数据;
服务器可以接收客户端在上传任务中发送的数据上传请求,该数据上传请求用于请求上传一个文件的全部或者部分数据。该上传任务是服务器在步骤206或者步骤208之后与客户端建立的上传任务。
通常来讲,当客户端向服务器上传一个文件时,会将该文件分割为多个相同或者不同大小的数据块来分别上传给服务器,在每次上传一个数据包时,客户端都会向服务器发送一个数据上传请求。在客户端将该文件分割为多个相同或者不同大小的数据块时,客户端可以根据预定大小将该文件分割为相同大小的数据块,也可以根据当前的网络状态将该文件分割为不同大小的数据块,也即,在网络状况较好时,将文件切割为较大的数据块;在网络状态状况较差时,将文件切割为较小的数据块。
当然,在一些实施例中,比如文件的数据量很小时,客户端可以直接请求传输该文件的全部数据,而不需要将该文件分割为很多个数据包。
步骤212,判断同时在上传该文件的其它上传任务是否已经上传完毕;如果是,则进入步骤214;如果否,则进入步骤216;
在同时存在上传该文件的其它上传任务时,服务器在接收到该客户端的数据上传请求之后,服务器可以判断同时在上传该文件的其它上传任务是否已经将该文件上传完毕。比如,服务器接收到客户端在上传任务1中发送的数据上传请求,该数据上传请求用于请求文件A的第3个数据包,在同时存在上传该文件的上传任务2时,服务器可以判断同时在上传该文件的上传任务2是否已经将文件A上传完毕。
步骤214,向客户端发送该文件上传完毕的消息;
如果服务器判断到同时上传该文件的上传任务2已经将文件A上传完毕,则向客户端发送文件A上传完毕的消息,也即表示客户端无需继续上传文件A的数据。
步骤216,接收数据并存储。
如果服务器判断到同时上传该文件的上传任务2还未将文件A上传完毕,则接收客户端请求上传的数据并存储至与该上传任务对应的存储位置。具体地讲,对于同时上传一个文件的多个上传任务,服务器可以将每个上传任务的上传数据暂时存储在各自对应的存储位置,只有在其中一个上传任务上传完毕该文件之后,才会将该文件的所有数据存储至同一存储位置。比如,对应首次上传该文件的任务1的上传数据可以直接存储在磁盘,但是对应于其它上传该文件的任务2、任务3之类的上传数据可以先存储入缓存中,该缓存可以是内存。
另外,如果服务器接收到客户端2在上传任务2中发送的数据上传请求时,则服务器判断同时上传该文件的上传任务1是否已经将文件A上传完毕。另外,在一些实施例中,上传任务1和上传任务2也可以都由一个客户端建立。对于同时存在3个或者3个以上的上传任务都在上传该文件的过程,为本领域技术人员易于思及的内容,不再一一赘述。
上述步骤210、步骤212、步骤214和步骤216在一个文件的上传过程中,可能循环多次,比如,该文件被分割为10个数据包上传,则上述步骤210、步骤212、步骤214和步骤216可能会循环10次以上。
步骤218,检测接收到的部分数据是否为该文件的最后部分:
在步骤216之后,如果服务器接收到的是该文件的一个数据包,则服务器在接收该数据包之后,可以检测服务器接收到的数据包是否为该文件的最后一个数据包。
当然,本步骤218也可以在步骤210之后,步骤216之前进行,也可以与步骤216同时进行,本文对此不加具体的限定。
步骤220,若接收到的部分数据是文件的最后部分,则将文件的所有数据存储至同一存储位置,并且生成文件的存储位置与文件的文件内容的标识信息之间的对应关系。
如果服务器接收到的数据包是文件的最后一个数据包,则服务器将该文件的所有数据存储至同一存储位置,并且生成文件的存储位置与文件的文件内容的标识信息之间的对应关系。
比如,如果服务器接收到的数据包是由任务1上传的,则服务器此时已经将该文件的所有数据存储入磁盘,服务器可以建立该文件在磁盘中的存储位置与文件的文件内容的标识信息之间的对应关系;如果服务器接收到的数据包是由任务2或者其它非任务1的上传任务上传的,则服务器此时将该文件在缓存中存储的部分数据与任务1上传并保存在磁盘中的部分数据合并存储入磁盘,然后建立该文件在磁盘中的存储位置与文件的文件内容的标识信息之间的对应关系。
在一个具体的示例中,客户端1首先向服务器发送文件上传请求,用于请求上传文件A,然后服务器判断没有其它上传任务在上传该文件A,则与客户端1建立任务1,客户端1将该文件A根据自身网络状况分割为10个数据包,然后依次发送数据上传请求给服务器,请求上传文件A中的这10个数据包中某一个数据包。当客户端1正在向服务器上传第3个数据包时,客户端2向服务器发送文件上传请求,也用于请求上传文件A,然后服务器在根据文件上传请求中携带的文件A的内容标识信息判断到任务1也在上传该文件A,则向客户端2反馈客户端1已经上传的第2个数据包在文件A中的偏移位置,以便与客户端2建立任务2,客户端2将该文件A中从所述偏移位置开始的未上传部分根据自身网络状况分割为5个数据包,然后依次发送数据上传请求给服务器,以请求上传这5个数据包中的某一个数据包。在之后的过程中,服务器每次接收到客户端1或者客户端2的数据上传请求时,都判断另一个客户端对应的上传任务是否已经上传完毕,如果是,则向客户端1或者客户端2发送文件A已经上传完毕的消息。
综上所述,本实施例提供的文件上传方法,通过在接收到客户端的数据上传请求时,判断同时在上传所述文件的其它上传任务是否已经上传完毕,来选择完成本次上传任务或者继续接收数据,解决了现有技术对存储空间和上传流量耗费较多的问题,达到了在相同或者不同的客户端同时上传同一文件而导致冲突问题时,服务器总是只存储一份该文件,而且只要有一个客户端上传该文件成功,则其他客户端无需继续上传该文件,从而节省了其他客户端的上传流量的效果。另外,服务器在接收到客户端发送的文件上传请求时,可以通过该文件上传请求携带的文件的内容标识信息来判断是否存在其它上传任务正在同时上传该文件,然后选择向客户端反馈第一响应消息或者第二响应消息来建立上传任务,可以达到进一步地节省客户端的上传流量的效果。
在实施例二中,同时上传一个文件的各个上传任务之间,除了在建立任务时的处理方式不同外,后续上传过程还是各自独立的。为了进一步地节省客户端的上传流量,请继续参考如下实施例。
实施例三
请参考图4,其示出了本发明实施例三提供的文件上传方法的方法流程图。本实施例主要以该文件上传方法应用于图1所示的服务器中来举例说明,该文件上传方法用于多个上传任务同时上传同一文件时的文件上传过程,与实施例二相比,本实施例由步骤316、步骤318和步骤320来替代步骤216,以实现多个上传任务协作上传同一文件。该文件上传方法包括:
步骤302,接收客户端发送的文件的内容标识信息;
在客户端需要上传文件时,客户端向服务器发送文件上传请求,该文件上传请求携带有该文件的内容标识信息,比如该文件的MD5(Message DigestAlgorithm MD5,消息摘要算法第五版)值。由于文件的内容标识信息是根据文件包括的内容获取得到的,所以相同的文件具有相同的内容标识信息,不同的文件具有不同的内容标识信息。
该文件上传请求还可以携带有文件的文件信息和客户端的标识信息,其中,文件信息可以包括文件名、文件格式和文件大小之类的信息;客户端的标识信息可以是一组用户名或者密码、IMEI(International Mobile Equipment Identity,国际移动设备身份码)、UUID(Universally Unique Identifier,通用唯一识别码)或者GUID(GloballyUnique Identifier,全球唯一标识符)。
需要说明的是,文件上传请求可以用于请求上传不止一个文件,比如,一个文件上传请求中同时请求上传三个文件。但在本文中,为了简化描述,均以一个文件上传请求用于请求上传一个文件为例来进行描述。
步骤304,根据文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件;如果是,则进入步骤306;如果否,则进入步骤308;
服务器在接收客户端发送的文件上传请求之后,服务器根据该文件上传请求中携带的文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件,比如,服务器可以判断正在进行的上传任务中,是否存在上传任务正在上传与该内容标识信息相对应的文件。
易于思及的,服务器在进行本步骤之前,也可以先根据该文件的内容标识信息判断本地是否已经存储有该文件,如果是,则直接进入步骤314;如果否,再执行本步骤。
步骤306,向客户端发送第一响应消息,第一响应消息携带有其它上传任务中该文件的已上传部分的偏移位置,以便客户端上传该文件中的未上传部分;
如果服务器判断到存在其它上传任务正在上传该文件,则服务器向客户端发送第一响应消息,第一响应消息携带有其它上传任务中该文件的已上传部分的偏移位置。具体地讲,该文件的已上传部分的偏移位置是指该文件的已上传数据在全部数据中相对于文件头的偏移位置,比如,文件的大小为108KB,该文件的已上传数据为80KB,则该文件的已上传数据在全部数据中相对于文件头的偏移位置为80KB。此后,客户端可以从相对于该文件的文件头偏移80KB的位置开始,继续上传该文件的剩余数据,也即该文件中的未上传部分。
由于除了本次上传任务,同时在上传该文件的其它上传任务可能为两个或者两个以上,此时,该文件的已上传部分的偏移位置可以是其它上传任务中最早的上传任务所对应的该文件的已上传部分的偏移位置;也可以是其它上传任务中上传进度最快的上传任务所对应的该文件的已上传部分的偏移位置。
但是为了尽可能地节省客户端的上传流量,优选采用其它上传任务中上传进度最快的上传任务所对应的该文件的已上传部分的偏移位置作为该文件的已上传部分的偏移位置。在具体实现时,服务器可以记录其它上传任务中上传进度最快的上传任务所对应的该文件的已上传部分的偏移位置。比如,服务器每次接收完毕一个上传任务对于该文件上传的一个数据包时,判断记录中的该文件的已上传部分是否包含了该数据包,如果不包含,则该文件的已上传部分的偏移位置更新为该数据包的结束位置。
此后,服务器与客户端建立上传任务,开始协作上传该文件。
步骤308,向客户端发送第二响应消息,以便客户端上传该文件。
如果服务器判断到不存在其它上传任务正在上传该文件,则向客户端发送第二响应消息,以便客户端上传该文件。
此后,服务器与客户端建立上传任务,开始协作上传该文件。
需要补充说明的是,为了便于客户端下载,服务器在接收到客户端发送文件上传请求中的文件的内容标识信息之后,还可以生成与该文件的内容标识信息所对应的提取码,并存储该文件的内容标识信息和该提取码之间的对应关系。然后,服务器向客户端发送还携带有提取码的第一响应消息或者第二响应消息;这样,客户端在上传该文件之后,可以根据提取码下载该文件。其中,文件的内容标识信息和提取码之间的对应关系可以是多对一的关系,也即,如果客户端发送的文件上传请求用于请求上传两个或者两个以上的文件,服务器可以生成同时与这两个或者两个以上的文件的内容标识信息对应的一个提取码,以便客户端之后可以根据这一个提取码同时下载这两个或者两个以上的文件。
另外,客户端利用提取码下载文件的过程可以是:第一,服务器接收客户端发送的提取码;第二,服务器根据预先存储的文件的内容标识信息和提取码之间的对应关系,查询到至少一个文件的内容标识信息;第三,服务器根据至少一个文件的内容标识信息查询对应文件的存储位置,并反馈该存储位置给客户端;第四,客户端根据服务器反馈的存储位置下载文件。
步骤310,接收客户端在一次上传任务中发送的数据上传请求,该数据上传请求用于请求上传一个文件的全部或者部分数据;
服务器可以接收客户端在上传任务中发送的数据上传请求,该数据上传请求用于请求上传一个文件的全部或者部分数据。该上传任务是服务器在步骤306或者步骤308之后与客户端建立的上传任务。
通常来讲,当客户端向服务器上传一个文件时,会将该文件分割为多个相同或者不同大小的数据块来分别上传给服务器,在每次上传一个数据包时,客户端都会向服务器发送一个数据上传请求。在客户端将该文件分割为多个相同或者不同大小的数据块时,客户端可以根据预定大小将该文件分割为相同大小的数据块,也可以根据当前的网络状态将该文件分割为不同大小的数据块,也即,在网络状况较好时,将文件切割为较大的数据块;在网络状态状况较差时,将文件切割为较小的数据块。
当然,在一些实施例中,比如文件的数据量很小时,客户端可以直接请求传输该文件的全部数据,而不需要将该文件分割为很多个数据包。
步骤312,判断同时在上传该文件的其它上传任务是否已经上传完毕;如果是,则进入步骤314;如果否,则进入步骤316;
在同时存在上传该文件的其它上传任务时,服务器在接收到该客户端的数据上传请求之后,服务器可以判断同时在上传该文件的其它上传任务是否已经将该文件上传完毕。比如,服务器接收到客户端在上传任务3中发送的数据上传请求,该数据上传请求用于请求文件A的第3个数据包,在同时存在上传该文件的任务1和任务2时,服务器可以判断同时在上传该文件的任务1和任务2是否已经将文件A上传完毕。
步骤314,向客户端发送该文件上传完毕的消息;
如果服务器判断到同时上传该文件的任务1或任务2已经将文件A上传完毕,则向客户端发送文件A上传完毕的消息,也即表示客户端无需继续上传文件A的数据。
步骤316,继续判断同时在上传该文件的其它上传任务中该文件的已上传部分是否已经包含客户端请求上传的部分数据;如果是,则进入步骤318;如果否,则进入步骤320;
如果服务器判断到同时上传该文件的任务1和任务2还未将文件A上传完毕,则服务器继续判断同时在上传该文件的任务1和任务2中该文件的已上传部分是否已经包含客户端请求上传的数据包。优选地,此处的该文件的已上传部分是指任务1和任务2中上传进度最快的一个上传任务中该文件的已上传部分,比如,假设任务2的上传进度最快,则服务器判断同时在上传该文件的任务2中该文件的已上传部分是否已经包含客户端请求上传的数据包。
步骤318,向客户端发送第三响应消息,第三响应消息携带有其它上传任务中该文件的已上传部分的偏移位置,以便客户端上传文件中的未上传部分;
如果服务器判断到同时上传该文件的任务2中该文件的已上传部分已经包含客户端请求上传的数据包,则服务器向客户端发送第三响应消息,第三响应消息携带有其它上传任务(任务2)中该文件的已上传部分的偏移位置,以便客户端上传文件中的未上传部分。
此后,客户端重新提交数据上传请求,用于请求从该文件的已上传部分的偏移位置开始的另外一个数据包。
步骤320,接收该部分数据并存储;
如果服务器判断到同时上传该文件的任务2中该文件的已上传部分还未包含客户端请求上传的数据包,则服务器接收客户端请求上传的数据包并存储至与该上传任务对应的存储位置。具体地讲,对于同时上传一个文件的多个上传任务,服务器可以将每个上传任务的上传数据暂时存储在各自对应的存储位置,只有在其中一个上传任务上传完毕该文件之后,才会将该文件的所有数据存储至同一存储位置。比如,对应首次上传该文件的任务1的上传数据可以直接存储在磁盘,但是对应于其它上传该文件的任务2、任务3之类的上传数据可以先存储入缓存中,该缓存可以是内存。
上述步骤310至320在一个文件的上传过程中,可能循环多次。
步骤322,检测接收到的部分数据是否为该文件的最后部分:
在步骤322之后,如果服务器接收到的是该文件的一个数据包,则服务器在接收该数据包之后,可以检测服务器接收到的数据包是否为该文件的最后一个数据包。
当然,本步骤322也可以在步骤310之后,步骤320之前进行,也可以与步骤320同时进行,本文对此不加具体的限定。
步骤324,若接收到的部分数据是文件的最后部分,则将文件的所有数据存储至同一存储位置,并且生成文件的存储位置与文件的文件内容的标识信息之间的对应关系。
如果服务器接收到的数据包是文件的最后一个数据包,则服务器将该文件的所有数据存储至同一存储位置,并且生成文件的存储位置与文件的文件内容的标识信息之间的对应关系。在服务器将该文件的所有数据存储至同一存储位置时,可能需要从与不同的上传任务所对应的存储位置获取该文件中的一部分数据。同时,该同一存储位置通常是磁盘,不同的上传任务所对应的存储位置可能是磁盘或者内容。
综上所述,与实施例二相比,本实施例提供的文件上传方法,通过实时判断客户端请求上传的部分数据是否已经包含在其它上传任务中该文件的已上传部分中,来选择重新上传该文件的未上传部分或者接收该部分数据,使得每个上传任务在上传文件中的数据时,总是上传当前情况下该文件的未上传部分,可以是每个上传任务协作上传一个文件的各部分数据,最终达到进一步地节省客户端的上传流量的效果。
实施例四至实施例九为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的技术细节,请参照本发明方法实施例。
实施例四
请参考图5,其示出了本发明实施例四提供的服务器的结构方框图,该服务器包括:请求接收模块420、任务判断模块440、完毕反馈模块460和数据存储模块480。
请求接收模块420,用于接收客户端在一次上传任务中发送的数据上传请求,所述数据上传请求用于请求上传一个文件的全部或者部分数据。
任务判断模块440,用于判断同时在上传所述请求接收模块420接收到的数据上传请求请求上传的所述文件的其它上传任务是否已经上传完毕。
完毕反馈模块460,用于如果所述任务判断模块440的判断结果为是,则向所述客户端发送所述文件上传完毕的消息;
数据存储模块480,用于如果所述任务判断模块440的判断结果为否,则接收所述数据并存储。
综上所述,本实施例提供的服务器,通过在接收到客户端的数据上传请求时,判断同时在上传所述文件的其它上传任务是否已经上传完毕,来选择完成本次上传任务或者继续接收数据,解决了现有技术对存储空间和上传流量耗费较多的问题,达到了在相同或者不同的客户端同时上传同一文件而导致冲突问题时,服务器总是只存储一份该文件,而且只要有一个客户端上传该文件成功,则其他客户端无需继续上传该文件,从而节省了其他客户端的上传流量的效果。
实施例五
请参考图6,其示出了本发明实施例五提供的服务器的结构方框图。与实施例三相比,该服务器不仅包括:请求接收模块420、任务判断模块440、完毕反馈模块460和数据存储模块480;还包括标识接收模块412、冲突检测模块414、第一响应模块416和第二响应模块418。
标识接收模块412,用于接收客户端发送的一个文件的内容标识信息。
冲突检测模块414,用于根据所述标识接收模块412接收到的文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件。
第一响应模块416,用于如果冲突检测模块414的判断结果为是,则向所述客户端发送第一响应消息,所述第一响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分。
第二响应模块418,用于如果所述冲突检测模块414的判断结果为否,则向所述客户端发送第二响应消息,以便所述客户端上传所述文件。
请求接收模块420,用于接收客户端在收到第一响应模块416或者第二响应模块418发送的响应消息之后,在上传所述文件的上传任务中发送的数据上传请求,所述数据上传请求用于请求上传所述文件的全部或者部分数据。
任务判断模块440,用于如果冲突检测模块414的判断结果为是时,判断同时在上传所述请求接收模块420接收到的数据上传请求用于请求上传的所述文件的其它上传任务是否已经上传完毕。
完毕反馈模块460,用于如果所述任务判断模块440的判断结果为是,则向所述客户端发送所述文件上传完毕的消息;
数据存储模块480,用于如果所述任务判断模块440的判断结果为否,则接收所述数据并存储。
如果所述请求接收模块420接收到的数据上传请求用于请求上传一个文件的部分数据,所述服务器,还可以包括:数据检测模块492和关系生成模块494。
所述数据检测模块492,用于检测所述数据存储模块480存储的部分数据是否为所述文件的最后部分:
所述关系生成模块494,用于若所述数据检测模块492检测到部分数据是所述文件的最后部分,则将所述文件的所有数据存储至同一存储位置,并且生成所述文件的存储位置与所述文件的文件内容的标识信息之间的对应关系。
需要补充说明的是,在上述描述中,若其它上传任务为两个或者两个以上,则所述其它上传任务中所述文件的已上传部分的偏移位置为:
所述其它上传任务中最早的上传任务所对应的所述文件的已上传部分的偏移位置;
或者,所述其它上传任务中上传进度最快的上传任务所对应的所述文件的已上传部分的偏移位置。
综上所述,本实施例提供的服务器,通过在接收到客户端的数据上传请求时,判断同时在上传所述文件的其它上传任务是否已经上传完毕,来选择完成本次上传任务或者继续接收数据,解决了现有技术对存储空间和上传流量耗费较多的问题,达到了在相同或者不同的客户端同时上传同一文件而导致冲突问题时,服务器总是只存储一份该文件,而且只要有一个客户端上传该文件成功,则其他客户端无需继续上传该文件,从而节省了其他客户端的上传流量的效果。另外,服务器在接收到客户端发送的文件上传请求时,可以通过该文件上传请求携带的文件的内容标识信息来判断是否存在其它上传任务正在同时上传该文件,然后选择向客户端反馈第一响应消息或者第二响应消息来建立上传任务,可以达到进一步地节省客户端的上传流量的效果。
实施例六
请参考图7,其示出了本发明实施例六提供的服务器的结构方框图。与实施例五相比,该服务器还包括提取码生成模块413,同时该服务器中的数据存储模块480还包括重复判断单元482、第三响应单元484和数据存储单元486。
标识接收模块412,用于接收客户端发送的一个文件的内容标识信息。
提取码生成模块413,用于生成与所述标识接收模块412接收到的文件的内容标识信息所对应的提取码,并存储所述文件的内容标识信息和所述提取码之间的对应关系;
冲突检测模块414,用于根据所述标识接收模块412接收到的文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件。
第一响应模块416,用于如果所述冲突检测模块414的判断结果为是,则向所述客户端发送第一响应消息,所述第一响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分。同时,所述第一响应模块416还具体用于向所述客户端发送还携带有所述提取码的第一响应消息,以便所述客户端在上传所述文件之后,根据所述提取码下载所述文件。
第二响应模块418,用于如果所述冲突检测模块414的判断结果为否,则向所述客户端发送第二响应消息,以便所述客户端上传所述文件。所述第二响应模块418,具体用于向所述客户端发送携带有所述提取码的第二响应消息,以便所述客户端在上传所述文件之后,根据所述提取码下载所述文件。
请求接收模块420,用于接收客户端在收到第一响应模块416或者第二响应模块418发送的响应消息之后发送的数据上传请求,所述数据上传请求用于请求上传所述文件的全部或者部分数据。
任务判断模块440,用于如果冲突检测模块414的判断结果为是时,判断同时在上传所述请求接收模块420接收到的数据上传请求请求上传的所述文件的其它上传任务是否已经上传完毕。
完毕反馈模块460,用于如果所述任务判断模块440的判断结果为是,则向所述客户端发送所述文件上传完毕的消息;
数据存储模块480,用于如果所述任务判断模块440的判断结果为否,则接收所述数据并存储。
具体地讲,如果所述请求接收模块420接收到的数据上传请求用于请求上传一个文件的部分数据,
所述重复判断单元482,用于判断同时在上传所述文件的其它上传任务中所述文件的已上传部分是否已经包含所述客户端请求上传的部分数据;
所述第三响应单元484,用于如果所述重复判断单元482的判断结果为是,则向所述客户端发送第三响应消息,所述第三响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分;
所述数据存储单元486,用于如果所述重复判断单元482的判断结果为否,则执行所述接收所述数据并存储的步骤。
另外,如果所述请求接收模块420接收到的数据上传请求用于请求上传一个文件的部分数据,所述服务器,还可以包括:数据检测模块492和关系生成模块494。
所述数据检测模块492,用于检测所述数据存储模块480存储的部分数据是否为所述文件的最后部分:
所述关系生成模块494,用于若所述数据检测模块492检测到部分数据是所述文件的最后部分,则将所述文件的所有数据存储至同一存储位置,并且生成所述文件的存储位置与所述文件的文件内容的标识信息之间的对应关系。
需要补充说明的是,在上述描述中,若其它上传任务为两个或者两个以上,则所述其它上传任务中所述文件的已上传部分的偏移位置为:
所述其它上传任务中最早的上传任务所对应的所述文件的已上传部分的偏移位置;
或者,所述其它上传任务中上传进度最快的上传任务所对应的所述文件的已上传部分的偏移位置。
综上所述,与实施例五相比,本实施例提供的服务器,通过实时判断客户端请求上传的部分数据是否已经包含在其它上传任务中该文件的已上传部分中,来选择重新上传该文件的未上传部分或者接收该部分数据,使得每个上传任务在上传文件中的数据时,总是上传当前情况下该文件的未上传部分,可以是每个上传任务协作上传一个文件的各部分数据,最终达到进一步地节省客户端的上传流量的效果。
实施例七
请参考图8,其示出了本发明实施例七提供的客户端的结构方框图。该客户端包括请求发送模块520、停止发送模块540和正常发送模块560。
请求发送模块520,用于向服务器发送数据上传请求,所述数据上传请求用于请求上传一个文件的全部或者部分数据。
停止发送模块540,用于在接收到所述服务器发送的所述文件上传完毕的消息时,停止发送所述文件的全部或者部分数据。所述文件为所述请求发送模块520请求上传的文件。
正常发送模块560,用于在未接收到所述服务器发送的所述文件上传完毕的消息时,发送所述文件的全部或者部分数据。
综上所述,本实施例提供的客户端,通过由服务器接收到客户端的数据上传请求时,判断同时在上传所述文件的其它上传任务是否已经上传完毕,来选择完成本次上传任务或者继续接收数据,解决了现有技术对存储空间和上传流量耗费较多的问题,达到了在相同或者不同的客户端同时上传同一文件而导致冲突问题时,服务器总是只存储一份该文件,而且只要有一个客户端上传该文件成功,则其他客户端无需继续上传该文件,从而节省了其他客户端的上传流量的效果。
实施例八
请参考图9,其示出了本发明实施例八提供的客户端的结构方框图。与实施例七相比,该客户端不仅包括请求发送模块520、停止发送模块540和正常发送模块560,还包括有标识发送模块512、第一接收模块514、第二接收模块516和第三接收模块580。
所述标识发送模块512,用于向所述服务器发送所述文件的内容标识消息,以便所述服务器根据所述文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件;
所述第一接收模块514,用于接收所述服务器在根据所述标识发送模块512发送的所述文件的内容标识信息判断到存在其它上传任务正在上传相同的文件之后发送的第一响应消息,所述第一响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置;
所述请求发送模块520,具体用于在第一接收模块514接收到第一响应消息之后,向服务器发送数据上传请求,所述数据上传请求用于请求上传所述文件中从所述偏移位置开始的部分数据。
所述第二接收模块516,用于接收所述服务器在根据所述标识发送模块512发送的所述文件的内容标识信息判断到不存在其它上传任务正在上传相同的文件之后发送的第二响应消息;
所述请求发送模块520,具体用于在第二接收模块516接收到第二响应消息之后,向服务器发送数据上传请求,所述数据上传请求用于请求上传所述文件中从文件头开始的部分数据。
所述第三接收模块580,用于接收所述服务器在判断到其它上传任务中所述文件的已上传部分是否已经包含客户端请求上传的部分数据之后发送的第三响应消息,所述第三响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置;
所述请求发送模块520,还用于向所述服务器再次发送数据上传请求,所述数据上传请求用于请求上传所述文件中从所述偏移位置开始的部分数据。
优选地,所述客户端,还包括:提取码接收模块592和下载请求发送模块594。其中,提取码接收模块592,用于接收所述服务器发送的提取码;下载请求发送模块594,用于根据所述提取码接收模块592接收到的提取码向所述服务器发送文件下载请求。
综上所述,本实施例提供的客户端,通过由服务器接收到客户端的数据上传请求时,判断同时在上传所述文件的其它上传任务是否已经上传完毕,来选择完成本次上传任务或者继续接收数据,解决了现有技术对存储空间和上传流量耗费较多的问题,达到了在相同或者不同的客户端同时上传同一文件而导致冲突问题时,服务器总是只存储一份该文件,而且只要有一个客户端上传该文件成功,则其他客户端无需继续上传该文件,从而节省了其他客户端的上传流量的效果。另外,通过在发送一个文件时首先向服务器发送该文件的内容标识信息,可以通过由服务器根据该文件的内容标识信息来判断是否存在其它上传任务正在同时上传该文件,然后选择向客户端反馈第一响应消息或者第二响应消息来建立上传任务,可以达到进一步地节省客户端的上传流量的效果。
实施例九
请参考图10,其示出了本发明实施例九提供的文件上传系统的结构方框图。该文件系统包括服务器120和客户端140。
服务器120可以是实施例四至实施例六任一实施例提供的服务器。
客户端140可以是实施例七或者实施例八提供的客户端。
综上所述,本实施例提供的文件上传系统,通过由服务器接收到客户端的数据上传请求时,判断同时在上传所述文件的其它上传任务是否已经上传完毕,来选择完成本次上传任务或者继续接收数据,解决了现有技术对存储空间和上传流量耗费较多的问题,达到了在相同或者不同的客户端同时上传同一文件而导致冲突问题时,服务器总是只存储一份该文件,而且只要有一个客户端上传该文件成功,则其他客户端无需继续上传该文件,从而节省了其他客户端的上传流量的效果。
需要说明的是:上述实施例提供的服务器在上传文件过程中,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的服务器与文件上传方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种文件上传方法,其特征在于,所述方法包括:
接收客户端发送的所述文件的内容标识信息,所述文件的内容标识信息是根据所述文件包括的内容获取得到的;
根据所述文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件;
如果是,向所述客户端发送第一响应消息,所述第一响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分;
如果否,向所述客户端发送第二响应消息,以便所述客户端上传所述文件;
接收客户端在一次上传任务中发送的数据上传请求,所述数据上传请求用于请求上传一个文件的全部或者部分数据;
判断同时在上传所述文件的其它上传任务是否已经上传完毕;
如果是,则向所述客户端发送所述文件上传完毕的消息;
如果否,则接收所述数据并存储。
2.根据权利要求1所述的文件上传方法,其特征在于,所述数据上传请求用于请求上传一个文件的部分数据,
在判断到同时在上传所述文件的其它上传任务还未上传完毕之后,所述接收所述数据并存储之前,还包括:
判断同时在上传所述文件的其它上传任务中所述文件的已上传部分是否已经包含所述客户端请求上传的部分数据;
如果是,则向所述客户端发送第三响应消息,所述第三响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分;
如果否,则执行所述接收所述数据并存储的步骤。
3.根据权利要求1或2所述的文件上传方法,其特征在于,所述数据上传请求用于请求上传一个文件的部分数据,
所述接收所述数据并存储之后,还包括:
检测所述部分数据是否为所述文件的最后部分:
若所述部分数据是所述文件的最后部分,则将所述文件的所有数据存储至同一存储位置,并且生成所述文件的存储位置与所述文件的文件内容的标识信息之间的对应关系。
4.根据权利要求1所述的文件上传方法,其特征在于,所述接收客户端发送的所述文件的内容标识信息之后,还包括:
生成与所述文件的内容标识信息所对应的提取码,并存储所述文件的内容标识信息和所述提取码之间的对应关系;
所述向所述客户端发送第一响应消息,对应包括:
向所述客户端发送还携带有所述提取码的第一响应消息,以便所述客户端在上传所述文件之后,根据所述提取码下载所述文件;
所述向所述客户端发送第二响应消息,对应包括:
向所述客户端发送携带有所述提取码的第二响应消息,以便所述客户端在上传所述文件之后,根据所述提取码下载所述文件。
5.根据权利要求1或2所述的文件上传方法,其特征在于,若其它上传任务为两个或者两个以上,则所述其它上传任务中所述文件的已上传部分的偏移位置为:
所述其它上传任务中最早的上传任务所对应的所述文件的已上传部分的偏移位置;
或者,所述其它上传任务中上传进度最快的上传任务所对应的所述文件的已上传部分的偏移位置。
6.一种服务器,其特征在于,所述服务器包括:
请求接收模块,用于接收客户端在一次上传任务中发送的数据上传请求,所述数据上传请求用于请求上传一个文件的全部或者部分数据;
任务判断模块,用于判断同时在上传所述文件的其它上传任务是否已经上传完毕;
完毕反馈模块,用于如果所述任务判断模块的判断结果为是,则向所述客户端发送所述文件上传完毕的消息;
数据存储模块,用于如果所述任务判断模块的判断结果为否,则接收所述数据并存储;
其中,所述服务器,还包括:
标识接收模块、冲突检测模块、第一响应模块和第二响应模块;
所述标识接收模块,用于接收客户端发送的所述文件的内容标识信息,所述文件的内容标识信息是根据所述文件包括的内容获取得到的;
所述冲突检测模块,用于根据所述文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件;
所述第一响应模块,用于如果所述冲突检测模块的判断结果为是,则向所述客户端发送第一响应消息,所述第一响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分;
所述第二响应模块,用于如果所述冲突检测模块的判断结果为否,则向所述客户端发送第二响应消息,以便所述客户端上传所述文件。
7.根据权利要求6所述的服务器,其特征在于,所述请求接收模块接收到的数据上传请求用于请求上传一个文件的部分数据,
所述数据存储模块,具体包括:重复判断单元、第三响应单元和数据存储单元;
所述重复判断单元,用于判断同时在上传所述文件的其它上传任务中所述文件的已上传部分是否已经包含所述客户端请求上传的部分数据;
所述第三响应单元,用于如果所述重复判断单元的判断结果为是,则向所述客户端发送第三响应消息,所述第三响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置,以便所述客户端上传所述文件中的未上传部分;
所述数据存储单元,用于如果所述重复判断单元的判断结果为否,则执行所述接收所述数据并存储的步骤。
8.根据权利要求6或7所述的服务器,其特征在于,所述请求接收模块接收到的数据上传请求用于请求上传一个文件的部分数据,
所述服务器,还包括:
数据检测模块和关系生成模块;
所述数据检测模块,用于检测所述数据存储模块存储的部分数据是否为所述文件的最后部分:
所述关系生成模块,用于若所述数据检测模块检测到部分数据是所述文件的最后部分,则将所述文件的所有数据存储至同一存储位置,并且生成所述文件的存储位置与所述文件的文件内容的标识信息之间的对应关系。
9.根据权利要求6所述的服务器,其特征在于,所述服务器,还包括:
提取码生成模块;
所述提取码生成模块,用于生成与所述文件的内容标识信息所对应的提取码,并存储所述文件的内容标识信息和所述提取码之间的对应关系;
所述第一响应模块,具体用于向所述客户端发送还携带有所述提取码的第一响应消息,以便所述客户端在上传所述文件之后,根据所述提取码下载所述文件;
所述第二响应模块,具体用于向所述客户端发送携带有所述提取码的第二响应消息,以便所述客户端在上传所述文件之后,根据所述提取码下载所述文件。
10.根据权利要求6或7所述的服务器,其特征在于,若其它上传任务为两个或者两个以上,则所述其它上传任务中所述文件的已上传部分的偏移位置为:
所述其它上传任务中最早的上传任务所对应的所述文件的已上传部分的偏移位置;
或者,所述其它上传任务中上传进度最快的上传任务所对应的所述文件的已上传部分的偏移位置。
11.一种客户端,其特征在于,包括:
请求发送模块,用于向服务器发送数据上传请求,所述数据上传请求用于请求上传一个文件的全部或者部分数据;
停止发送模块,用于在接收到所述服务器发送的所述文件上传完毕的消息时,停止发送所述文件的全部或者部分数据;
正常发送模块,用于在未接收到所述服务器发送的所述文件上传完毕的消息时,发送所述文件的全部或者部分数据;
其中,所述客户端,还包括:
标识发送模块、第一接收模块和第二接收模块;
所述标识发送模块,用于向所述服务器发送所述文件的内容标识消息,以便所述服务器根据所述文件的内容标识信息判断是否存在其它上传任务正在上传相同的文件,所述文件的内容标识信息是根据所述文件包括的内容获取得到的;
所述第一接收模块,用于接收所述服务器在判断到存在其它上传任务正在上传相同的文件之后发送的第一响应消息,所述第一响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置;
所述请求发送模块,具体用于在第一接收模块接收到第一响应消息之后,向服务器发送数据上传请求,所述数据上传请求用于请求上传所述文件中从所述偏移位置开始的部分数据;
所述第二接收模块,用于接收所述服务器在判断到不存在其它上传任务正在上传相同的文件之后发送的第二响应消息;
所述请求发送模块,具体用于在第二接收模块接收到第二响应消息之后,向服务器发送数据上传请求,所述数据上传请求用于请求上传所述文件中从文件头开始的部分数据。
12.根据权利要求11所述的客户端,其特征在于,所述客户端,还包括:
第三接收模块;
所述第三接收模块,用于接收所述服务器在判断到其它上传任务中所述文件的已上传部分是否已经包含客户端请求上传的部分数据之后发送的第三响应消息,所述第三响应消息携带有其它上传任务中所述文件的已上传部分的偏移位置;
所述请求发送模块,还用于向所述服务器再次发送数据上传请求,所述数据上传请求用于请求上传所述文件中从所述偏移位置开始的部分数据。
13.根据权利要求11或12所述客户端,其特征在于,所述客户端,还包括:
提取码接收模块,用于接收所述服务器发送的提取码;
下载请求发送模块,用于根据所述提取码向所述服务器发送文件下载请求。
14.一种文件上传系统,其特征在于,其包括如权利要求6至10任一所述的服务器和如权利要求11至13任一所述的客户端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210318768.4A CN103685332B (zh) | 2012-08-31 | 2012-08-31 | 文件上传方法、客户端、服务器及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210318768.4A CN103685332B (zh) | 2012-08-31 | 2012-08-31 | 文件上传方法、客户端、服务器及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103685332A CN103685332A (zh) | 2014-03-26 |
CN103685332B true CN103685332B (zh) | 2018-04-24 |
Family
ID=50321644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210318768.4A Active CN103685332B (zh) | 2012-08-31 | 2012-08-31 | 文件上传方法、客户端、服务器及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103685332B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104486434A (zh) * | 2014-12-23 | 2015-04-01 | 深圳供电局有限公司 | 一种移动终端文件上传、下载的方法及移动终端 |
CN104601582B (zh) * | 2015-01-20 | 2018-09-14 | 广东欧珀移动通信有限公司 | 一种传送文件的方法、装置和系统 |
CN108234539B (zh) * | 2016-12-14 | 2022-06-03 | 北京金山云网络技术有限公司 | 一种文件上传、下载、传输方法及装置 |
CN110875932A (zh) * | 2018-08-29 | 2020-03-10 | 阿里巴巴集团控股有限公司 | 文件上传方法、装置和系统 |
CN109218435B (zh) * | 2018-09-30 | 2021-07-23 | 湖北华联博远科技有限公司 | 一种数据上传方法及系统 |
CN111681330B (zh) * | 2020-04-16 | 2021-10-22 | 福建星网物联信息系统有限公司 | 一种无感考勤方法及设备 |
CN112416257A (zh) * | 2020-12-02 | 2021-02-26 | 北京中指讯博数据信息技术有限公司 | 资源存储方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101174954A (zh) * | 2006-10-31 | 2008-05-07 | 上海高勤通信科技有限公司 | 一种基于互联网超文本传输协议的文件断点上传方法 |
CN101179393A (zh) * | 2006-12-14 | 2008-05-14 | 腾讯科技(深圳)有限公司 | 一种实现文件断点续传的方法及系统 |
CN101534322A (zh) * | 2009-04-13 | 2009-09-16 | 腾讯科技(深圳)有限公司 | 文件上传系统和文件上传方法 |
CN101754107A (zh) * | 2008-12-17 | 2010-06-23 | 北大方正集团有限公司 | 一种在移动通讯终端实时发布和共享文件的方法和系统 |
CN102497395A (zh) * | 2011-11-30 | 2012-06-13 | 北京京航计算通讯研究所 | 断点上传应用控制方法 |
-
2012
- 2012-08-31 CN CN201210318768.4A patent/CN103685332B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101174954A (zh) * | 2006-10-31 | 2008-05-07 | 上海高勤通信科技有限公司 | 一种基于互联网超文本传输协议的文件断点上传方法 |
CN101179393A (zh) * | 2006-12-14 | 2008-05-14 | 腾讯科技(深圳)有限公司 | 一种实现文件断点续传的方法及系统 |
CN101754107A (zh) * | 2008-12-17 | 2010-06-23 | 北大方正集团有限公司 | 一种在移动通讯终端实时发布和共享文件的方法和系统 |
CN101534322A (zh) * | 2009-04-13 | 2009-09-16 | 腾讯科技(深圳)有限公司 | 文件上传系统和文件上传方法 |
CN102497395A (zh) * | 2011-11-30 | 2012-06-13 | 北京京航计算通讯研究所 | 断点上传应用控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103685332A (zh) | 2014-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103685332B (zh) | 文件上传方法、客户端、服务器及系统 | |
CN103179156B (zh) | 一种图片分享方法、系统及设备 | |
CN102739411B (zh) | 提供证明服务 | |
CN103873505B (zh) | 向云存储服务器离线上传的方法、系统与装置 | |
CN104144098B (zh) | 消息推送方法、系统及推送服务器设备 | |
CN107483627A (zh) | 一种文件分发、下载方法、分发服务器、客户端及系统 | |
CN111641583A (zh) | 一种物联网资源接入系统及资源接入方法 | |
CN101156407B (zh) | 通过通信网络提供内容的方法 | |
CN101227343B (zh) | 一种TCPv6和/或UDPv6测试设备及方法 | |
CN102708192B (zh) | 一种文档共享的方法及系统、设备 | |
CN101395838A (zh) | 数据同步方法、系统和装置 | |
CN102325202B (zh) | 一种用户地址表管理方法和设备 | |
RU2009135239A (ru) | Способы доступа к удаленным данным для портативных устройств | |
CN101924785A (zh) | 数据的上传方法、下载方法和系统 | |
US20090030917A1 (en) | Multimedia messaging service-based database synchronization | |
EP1796010A2 (en) | Receiving and transmitting distributed content | |
WO2011038628A1 (zh) | 数据获取方法、接入节点和系统 | |
CN103581881B (zh) | 综合取号装置和网络侧获取用户手机号码的系统和方法 | |
CN102857547B (zh) | 分布式缓存的方法及设备 | |
CN107547352A (zh) | 文件发送方法、装置及系统 | |
CN107835095A (zh) | 一种日志的处理方法及装置 | |
CN113114503B (zh) | 基于应用交付网络需求的部署方法及装置 | |
CN112398754B (zh) | 数据传输方法、装置、介质、电子设备及网络接入设备 | |
CN105681266B (zh) | 一种多媒体电话MMTel的通讯集群方法及装置 | |
CN109788251A (zh) | 视频处理方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |