一种文件上传方法及上传装置
文献发布时间:2023-06-19 10:24:22
技术领域
本发明涉及计算机技术领域,尤其涉及一种文件上传方法及上传装置。
背景技术
在传统的web项目中避免不了文件上传、下载的场景,由于同一份文件可能会在多个用户之间进行共享,这时,在文件上传时,就避免不了同一个文件存在被不同人上传的场景,导致同一份文件在服务器存储多分,会占用服务器硬盘资源。
发明内容
有鉴于此,本发明实施例提供一种文件上传方法及上传装置,能够解决同一份文件在服务器中存储多份,占用服务器硬盘资源的问题。
第一方面,本发明实施例提供一种文件上传方法,所述方法包括:获取待上传文件的指纹信息,所述指纹信息根据所述待上传文件的文件内容生成;以所述指纹信息作为关键字设置分布式锁;根据所述指纹信息,判断服务端是否存在文件内容与所述待上传文件的文件内容相同的目标文件;若是,则根据所述待上传文件的特征信息更新所述目标文件的上传参数;释放所述分布式锁。
可选的,所述待上传文件的特征信息包括文件名、文件大小、文件指纹信息、上传者信息;所述目标文件的上传参数包括每次上传的特征信息以及总上传次数;所述根据所述待上传文件的特征信息更新所述目标文件的上传参数,包括:创建所述待上传文件的特征信息与所述目标文件存储地址之间的关联关系;将所述目标文件对应的总上传次数加1。
可选的,在将所述目标文件对应的总上传次数加1之后,所述方法还包括:根据对所述待上传文件的删除指令,将所述目标文件对应的总上传次数减1。
可选的,在判断服务端不存在文件内容与所述待上传文件的文件内容相同的目标文件,在释放所述分布式锁之前,所述方法还包括:获取所述待上传文件的分片总数n;接收所述待上传文件的第1至n个分片数据;对各所述分片数据进行整合,生成整合文件;根据所述整合文件的文件内容,生成整合文件的指纹信息;判断所述整合文件的指纹信息与所述待上传文件的指纹信息是否相同;若是,则保存所述整合文件。
可选的,在保存所述整合文件之后,所述方法还包括:创建所述待上传文件的特征信息与所述整合文件的存储地址之间的关联关系,所述待上传文件的特征信息包括文件名、文件大小、文件指纹信息、上传者信息;将所述整合文件对应的总上传次数设为1。
第二方面,本发明实施例提供一种文件上传装置,应用于服务端,所述装置包括:获取单元,用于获取待上传文件的指纹信息,所述指纹信息根据所述待上传文件的文件内容生成;设置单元,用于以所述指纹信息作为关键字设置分布式锁;判断单元,用于根据所述指纹信息,判断服务端是否存在文件内容与所述待上传文件的文件内容相同的目标文件;更新单元,用于若是,则根据所述待上传文件的特征信息更新所述目标文件的上传参数;释放单元,用于释放所述分布式锁。
可选的,所述待上传文件的特征信息包括文件名、文件大小、文件指纹信息、上传者信息;所述目标文件的上传参数包括每次上传的特征信息以及总上传次数;所述更新单元包括:创建子单元,用于创建所述待上传文件的特征信息与所述目标文件存储地址之间的关联关系;计数子单元,用于将所述目标文件对应的总上传次数加1。
可选的,所述子计数单元还用于:根据对所述待上传文件的删除指令,将所述目标文件对应的总上传次数减1。
可选的,所述装置还包括整合单元,所述整合单元用于:获取所述待上传文件的分片总数n;接收所述待上传文件的第1至n个分片数据;对各所述分片数据进行整合,生成整合文件;根据所述整合文件的文件内容,生成整合文件的指纹信息;判断所述整合文件的指纹信息与所述待上传文件的指纹信息是否相同;若是,则保存所述整合文件。
可选的,所述装置还包括:创建单元,用于创建所述待上传文件的特征信息与所述整合文件的存储地址之间的关联关系,所述待上传文件的特征信息包括文件名、文件大小、文件指纹信息、上传者信息;计数单元,用于将所述整合文件对应的总上传次数设为1。
第三方面,本发明实施例提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述实施例任一所述的文件上传方法。
第四方面,本发明实施例还提供了一种存储介质,用于存储应用程序,所述应用程序用于执行前述实施例任一所述的文件上传方法。
第五方面,本发明实施例还提供了一种应用程序,用于执行前述实施例任一所述的文件上传方法。
本发明实施例提供的一种文件上传方法及上传装置,通过获取待上传文件的指纹信息,所述指纹信息根据所述待上传文件的文件内容生成;以所述指纹信息作为关键字设置分布式锁;根据所述指纹信息,判断服务端是否存在文件内容与所述待上传文件的文件内容相同的目标文件;若是,则根据所述待上传文件的特征信息更新所述目标文件的上传参数;释放所述分布式锁。这样,能够在存储所述待上传文件之前,先判断服务端是否已存在相同内容的目标文件,在服务端已存在相同内容的目标文件的情况下,不再对待上传文件进行重复保存,只记录待上传文件的特征信息即可,解决了同一份文件在服务器中存储多份,占用服务器硬盘资源的问题,实现了多个用户共享文件;另外,在对待上传文件处理之前,还根据所述待上传文件的指纹信息设置分布式锁,在对所述待上传文件处理完成之后,再释放所述分布式锁,这样,能有效的防止高并发情况下同一个文件上传的场景,进一步避免了同一文件被存储多份的情况。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明的实施例一提供的一种文件上传方法的流程示意图;
图2为本发明的实施例一提供的一种文件上传方法的部分流程示意图;
图3为本发明的实施例提供的一种具体的文件上传方法的流程示意图;
图4为本发明的实施例二提供的文件上传装置的结构示意图;
图5为本发明电子设备一个实施例的结构示意图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
实施例一
如图1所示,本发明实施例提供一种文件上传方法,应用于服务端,所述方法包括:
S101、获取待上传文件的指纹信息,所述指纹信息根据所述待上传文件的文件内容生成;
本步骤,所述指纹信息可以根据加密算法对所述文件内容进行加密后得到,所述加密算法可以为MD5加密算法,这时,所述待上传文件的指纹信息可以称为所述待上传文件的MD5值。
所述服务端获取待上传文件的指纹信息,可以包括:服务端暂存所述待上传文件之后,根据加密算法计算所述待上传文件的指纹信息,在后续步骤中若判断所述服务端已存在文件内容与所述待上传文件的文件内容相同的目标文件时,则再将所述缓存的待上传文件从服务端删除;或者,所述待上传文件的指纹信息由用户端计算得到,所述服务端获取用户端计算的所述指纹信息即可,这样,相比于前一种方法,可以避免待上传文件上传时占用服务器带宽。
S102、以所述指纹信息作为关键字设置分布式锁;
本步骤,分布式锁包括关键字(key),以所述指纹信息作为分布式锁的key设置分布式锁,例如以待上传文件的MD5值作为分布式锁的key设置分布式锁,这样,若同一时刻多个用户端共同上传同一个文件时,有且只有一个用户端可以获取到分布式锁,其他用户在操作时需要等拿到锁的用户释放分布式锁,待其他用户拿到锁后当前文件已经上传完成,能有效的防止高并发情况下同一个文件上传的场景。
S103、根据所述指纹信息,判断服务端是否存在文件内容与所述待上传文件的文件内容相同的目标文件;
本步骤,可以将所述待上传文件的指纹信息与服务端保存的文件的指纹信息进行比对,当所述待上传文件的指纹信息的生成规则与所述服务端的文件的指纹信息的生成规则相同时,指纹信息与所述待上传文件的指纹信息相同的文件即为所述目标文件。
S104、若是,则根据所述待上传文件的特征信息更新所述目标文件的上传参数;
本步骤,当所述目标文件存在时,即所述待上传文件已存在于服务端,这时,无需再重复上传所述待上传文件,只需将所述待上传文件的特征信息保存至服务端即可,这样,能够大大节省服务端的存储空间。
具体的,可以根据所述待上传文件的特征信息更新所述目标文件的上传参数;所述待上传文件的特征信息可以包括文件名、文件大小、文件指纹信息、上传者信息;所述目标文件的上传参数可以包括每次上传的特征信息以及总上传次数;这时,如图2所示,所述根据所述待上传文件的特征信息更新所述目标文件的上传参数,可以包括:
S1041、创建所述待上传文件的特征信息与所述目标文件存储地址之间的关联关系;
S1042、将所述目标文件对应的总上传次数加1。
本实施例,由于与所述目标文件的文件内容相同的其他待上传文件的文件名、文件大小、上传者可能与所述目标文件的对应信息并不相同,因此,创建所述待上传文件的特征信息与所述目标文件存储地址之间的关联关系,可以方便其他待上传文件的上传者根据其上传的待上传文件的特征信息查询、获取或者删除所述目标文件。
所述目标文件设置有总上传次数,通过所述总上传次数,可以统计内容与所述目标文件的内容相同的文件的总上传次数。这样,在用户端请求删除其曾经上传的待上传文件时,服务端只需根据对所述待上传文件的删除指令,将所述目标文件对应的总上传次数减1即可,无需对所述目标文件进行物理删除。
可选的,所述服务端可以设置有关系型数据库,这时,可以将上述步骤中创建的所述关联关系以及所述目标文件对应的总上传次数保存在所述关系型数据库中。
S105、释放所述分布式锁。
本步骤,服务端在对所述待上传文件处理完成之后,即释放所述分布式锁,其他上传同一文件的用户在才能够继续进行文件上传工作,能有效的防止高并发情况下同一个文件上传的场景,还能够避免大文件上传时的拥堵情况。
本发明实施例提供的文件上传方法,通过获取待上传文件的指纹信息,所述指纹信息根据所述待上传文件的文件内容生成;以所述指纹信息作为关键字设置分布式锁;根据所述指纹信息,判断服务端是否存在文件内容与所述待上传文件的文件内容相同的目标文件;若是,则根据所述待上传文件的特征信息更新所述目标文件的上传参数;释放所述分布式锁。这样,能够在存储所述待上传文件之前,先判断服务端是否已存在相同内容的目标文件,在服务端已存在相同内容的目标文件的情况下,不再对待上传文件进行重复保存,只记录待上传文件的特征信息即可,解决了同一份文件在服务器中存储多份,占用服务器硬盘资源的问题,实现了多个用户共享文件;另外,在对待上传文件处理之前,还根据所述待上传文件的指纹信息设置分布式锁,在对所述待上传文件处理完成之后,再释放所述分布式锁,这样,能有效的防止高并发情况下同一个文件上传的场景,进一步避免了同一文件被存储多份的情况。
可选的,在上述实施例中,在判断服务端不存在文件内容与所述待上传文件的文件内容相同的目标文件,在释放所述分布式锁之前,所述方法还包括:获取所述待上传文件的分片总数n;接收所述待上传文件的第1至n个分片数据;对各所述分片数据进行整合,生成整合文件;根据所述整合文件的文件内容,生成整合文件的指纹信息;判断所述整合文件的指纹信息与所述待上传文件的指纹信息是否相同;若是,则保存所述整合文件。
本实施例,在所述待上传文件的体积较大时,对所述待上传文件进行分片上传,能够解决文件体积过大影响上传或者下载速度的情况,且能够减轻文件体积过大占用服务器带宽导致服务器处理其他请求时缓慢的问题。例如,可以将每个分片数据的大小控制在5兆左右。
另外,本实施例在将各所述分片数据进行整合之后,还对所述整合文件的指纹信息与所述待上传文件的指纹信息进行比对,以防止对分片数据进行整合时出错。当判断所述整合文件的指纹信息与所述待上传文件的指纹信息不同时,即分片数据整合时出错,这时可以删除所述整合文件并通知用户端待上传文件上传出错。
可选的,在上述实施例中,在保存所述整合文件之后,所述方法还可以包括:创建所述待上传文件的特征信息与所述整合文件的存储地址之间的关联关系,所述待上传文件的特征信息包括文件名、文件大小、文件指纹信息、上传者信息;将所述整合文件对应的总上传次数设为1。
本实施例,由于所述整合文件是由所述待上传文件的分片数据整合而成,因此,服务端保存的所述整合文件相当于保存了所述待上传文件的内容,这时,只需记载所述待上传文件的特征信息与所述整合文件的存储地址之间的关联关系,即可使所述待上传文件的上传者根据所述待上传文件的特征信息查阅、调用或删除所述整合文件。所述待上传文件的特征信息还可以包括所述待上传文件上传时的分片个数。
由于所述服务端不存在其他与所述整合文件的内容相同的文件,所述整合文件对于所述服务端来说是首次上传,因此,将所述整合文件对应的总上传次数设为1即可。
如图3所示,可选的,所述接收所述待上传文件的第1至n个分片数据;对各所述分片数据进行整合,生成整合文件;可以包括:在接收到所述待上传文件的第一个分片数据时,创建整合文件并将所述第一个分片数据写入所述整合文件;根据分片数据的分片标识,依次将接收到的其他分片数据写入整合文件。
实施例二
如图4所示,本发明实施例提供一种文件上传装置,应用于服务端,所述装置包括:获取单元21,用于获取待上传文件的指纹信息,所述指纹信息根据所述待上传文件的文件内容生成;设置单元22,用于以所述指纹信息作为关键字设置分布式锁;判断单元23,用于根据所述指纹信息,判断服务端是否存在文件内容与所述待上传文件的文件内容相同的目标文件;更新单元24,用于若是,则根据所述待上传文件的特征信息更新所述目标文件的上传参数;释放单元25,用于释放所述分布式锁。
可选的,所述待上传文件的特征信息包括文件名、文件大小、文件指纹信息、上传者信息;所述目标文件的上传参数包括每次上传的特征信息以及总上传次数;所述更新单元包括:创建子单元,用于创建所述待上传文件的特征信息与所述目标文件存储地址之间的关联关系;计数子单元,用于将所述目标文件对应的总上传次数加1。
可选的,所述子计数单元还用于:根据对所述待上传文件的删除指令,将所述目标文件对应的总上传次数减1。
可选的,所述装置还包括整合单元,所述整合单元用于:获取所述待上传文件的分片总数n;接收所述待上传文件的第1至n个分片数据;对各所述分片数据进行整合,生成整合文件;根据所述整合文件的文件内容,生成整合文件的指纹信息;判断所述整合文件的指纹信息与所述待上传文件的指纹信息是否相同;若是,则保存所述整合文件。
可选的,所述装置还包括:创建单元,用于创建所述待上传文件的特征信息与所述整合文件的存储地址之间的关联关系,所述待上传文件的特征信息包括文件名、文件大小、文件指纹信息、上传者信息;计数单元,用于将所述整合文件对应的总上传次数设为1。
本实施例的装置,可以用于执行图1至3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。
在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本发明实施例还提供一种电子设备,所述电子设备包含前述任一实施例所述的装置。
图5为本发明电子设备一个实施例的结构示意图,可以实现本发明图1-3所示实施例的流程,如图5所示,上述电子设备可以包括:壳体31、处理器32、存储器33、电路板34和电源电路35,其中,电路板34安置在壳体31围成的空间内部,处理器32和存储器33设置在电路板34上;电源电路35,用于为上述电子设备的各个电路或器件供电;存储器33用于存储可执行程序代码;处理器32通过读取存储器33中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行上述任一实施例所述的文件上传方法。
处理器32对上述步骤的具体执行过程以及处理器32通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1-3所示实施例的描述,在此不再赘述。
该电子设备以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(5)其他具有数据交互功能的电子设备。
本发明实施例还提供了一种存储介质,用于存储应用程序,所述应用程序用于执行本发明实施例所提供的一种文件上传方法。
本发明实施例还提供了一种应用程序,用于执行本发明实施例所提供的文件上传方法。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本
发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
- 一种文件上传方法及上传装置
- 一种基于JS上传组件的文件上传方法及系统