一种生成文件名的方法及装置与流程

文档序号:15517864发布日期:2018-09-25 18:46阅读:146来源:国知局

本发明属于互联网应用技术领域,尤其涉及一种生成文件名的方法及装置。



背景技术:

随着互联网行业日益发展,网民越来越多,用户随时可以将自己的文件或视频上传至网站中。

但是随着用户创造内容(ugc,usergeneratedcontent)行业的发展,用户自行上传数量过大,命名相同的文件过多,无法完全做到文件上传名的唯一性,导致管理员不方便对其进行管理、检索,降低了工作效率。



技术实现要素:

针对现有技术存在的问题,本发明实施例提供了一种生成文件名的方法及装置,用于解决现有技术中由于用户上传至网站上的文件量过多,文件名不能做到唯一性,导致管理员在对其进行管理时,检索过程繁琐,进而降低工作效率的技术问题。

本发明提供一种生成文件名的方法,所述方法包括:

获取上传文件的用户标识及服务器当前的秒级时间戳;

利用第一转换规则将所述用户标识及所述秒级时间戳转换为第一字符串;

根据所述服务器当前的微秒级时间戳计算第一标识符;

利用加密算法将所述第一标识符转换为第二字符串;

利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名。

上述方案中,所述获取服务器当前的秒级时间戳,包括:

调用date(‘ymdhis’,now())方法将所述秒级时间戳转换为所述秒级时间戳的字符串。

上述方案中,利用第一转换规则将所述用户标识及所述秒级时间戳转换为第一字符串,包括:

获取所述用户标识的字符串及所述秒级时间戳的字符串;

根据所述秒级时间戳的字符串基于混淆算法确定出所述用户标识的字符串在所述秒级时间戳的字符串中的第一插入位置;

将所述用户标识的字符串插入所述秒级时间戳的字符串中的所述第一插入位置。

上述方案中,所述根据所述秒级时间戳的字符串基于混淆算法确定出所述用户标识的字符串在所述秒级时间戳的字符串中的第一插入位置,包括:

确定所述秒级时间戳的字符串的第一参照位;

获取第一参照位对应字符的第一数值;

基于所述第一数值确定出所述第一插入位置。

上述方案中,所述根据所述服务器当前的微秒级时间戳计算第一标识符之前,还包括:

在所述第一字符串中添加第二标识符,形成第三字符串。

上述方案中,所述在所述第一字符串中添加第二标识符,形成第三字符串,包括:

确定所述第一字符串的第二参照位;

获取所述第二参照位对应字符的第二数值;

基于所述第二数值确定所述第一字符串中的添加位置;

将所述第二标识符添加至所述第一字符串中的所述添加位置处,形成所述第三字符串。

上述方案中,所述利用加密算法将所述第一标识符转换为第二字符串,包括:

调用函数rand()获取一个整数,所述整数的值在0-99999之间;

将所述整数与所述第一标识符进行拼接;

通过哈希散列算法md5()将拼接后的字符串转换为所述第二字符串。

上述方案中,利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名,包括:

获取所述第三字符串;

确定所述第三字符串的第三参照位;

获取所述第三参照位的字符;

按照预设的第三转换规则将所述第三参照位的字符转换为第三数值;

基于所述第三数值确定出所述第二字符串在所述第三字符串中的第二插入位置;

将所述第二字符串插入所述第三字符串中的所述第二插入位置,形成第四字符串;所述第四字符串即为所述文件名。

本发明还提供一种生成文件名的装置,所述装置包括:

获取单元,用于获取上传文件的用户标识及服务器当前的秒级时间戳;

第一转换单元,用于利用第一转换规则将所述用户标识及所述秒级时间戳转换为第一字符串;

计算单元,用于根据所述服务器当前的微秒级时间戳计算第一标识符;

第二转换单元,用于利用加密算法将所述第一标识符转换为第二字符串;

第三转换单元,用于利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名。

上述方案中,获取所述用户标识的字符串及所述秒级时间戳的字符串;

根据所述秒级时间戳的字符串基于混淆算法确定出所述用户标识的字符串在所述秒级时间戳的字符串中的第一插入位置;

将所述用户标识的字符串插入所述秒级时间戳的字符串中的所述第一插入位置。

本发明提供了一种生成文件名的方法及装置,所述方法包括:获取上传文件的用户标识及服务器当前的秒级时间戳;利用第一转换规则将所述用户标识及所述秒级时间戳转换为第一字符串;根据所述服务器当前的微秒级时间戳计算第一标识符;利用加密算法将所述第一标识符转换为第二字符串;利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名;如此,利用所述服务器当前的微秒级时间戳计算出的第一标识符是已经是精确到毫秒级的,其重名的概率是千分之一,然后进一步利用加密算法将第一标识符转成的第二字符串是绝对不可逆的;最后再利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名,这样就保证了文件名的唯一性,进而管理员再对文件进行管理时,可以根据唯一的文件名对其进行检索、管理,从而提高了工作效率。

附图说明

图1为本发明实施例一提供的生成文件名的方法流程示意图;

图2为本发明实施例二提供的生成文件名的装置结构示意图。

具体实施方式

为了解决现有技术中由于用户上传至网站上的文件量过多,文件名不能做到唯一性,导致管理员在对其进行管理时,检索过程繁琐,进而降低工作效率的技术问题,本发明提供了一种生成文件名的方法及装置,所述方法包括:获取上传文件的用户标识及服务器当前的秒级时间戳;利用第一转换规则将所述用户标识及所述秒级时间戳转换为第一字符串;根据所述服务器当前的微秒级时间戳计算第一标识符;利用加密算法将所述第一标识符转换为第二字符串;利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名;

下面通过附图及具体实施例对本发明的技术方案做进一步的详细说明。

实施例一

本实施例提供一种生成文件名的方法,如图1所示,所述方法包括:

s101,获取上传文件的用户标识及服务器当前的秒级时间戳。

本步骤中,若用户已经在服务器中登录,那么就可以获取到用户在服务器中分配的用户标识uid,具体可以通过$_session[‘uid’]获取得到用户标识uid,所述用户标识uid可以为0~65535中的任一数值。例如所述用户标识uid的值可以是10000。

获取到用户uid后,还需通过调用系统自带方法now()获取服务器当前的秒级时间戳,利用系统函数date()将系统的秒级时间戳转换为年月日时分秒对应格式,再并调用date(‘ymdhis’,now())方法将所述秒级时间戳转换为所述秒级时间戳的字符串$str。例如秒级时间戳的字符串$str可以为20170220151615。

s102,利用第一转换规则将所述用户标识及所述秒级时间戳转换为第一字符串。

本步骤中,当获取到用户标识uid及及所述秒级时间戳的字符串后,可以利用第一转换规则将所述用户标识及所述秒级时间戳转换为第一字符串。具体地,首先根据所述秒级时间戳的字符串基于混淆算法确定出所述用户uid的字符串在所述秒级时间戳的字符串中的第一插入位置;将所述用户uid的字符串插入所述秒级时间戳的字符串中的所述第一插入位置。

而在确定第一插入位置时,具体包括:确定所述秒级时间戳的字符串的第一参照位;获取第一参照位对应字符的第一数值;基于所述第一数值确定出所述第一插入位置。

其中,第一转换规则可以包括多种:比如将字符与十进制数值对应转换,将字符与ascii码值进行对应转换。

当将字符与ascii码值进行对应转换时,获取到所述秒级时间戳的字符串的第一参照位,获取第一参照位对应的字符,所述该字符对应的ascii码值,以所述ascii码值为参照值,将所述用户uid的字符串插入所述秒级时间戳的字符串中的相应位置之后。

这里,所述秒级时间戳的字符串的第一参照位可以是该字符串中的任意一位,比如首位或末位,当以末位设置为第一参照位时,若秒级时间戳的字符串为20170220151615,那么就是第一参照位的字符就是“5”,再获取到“5”对应的ascii码为“53”,然后将户uid的字符串插入秒级时间戳的字符串的第53个字符之后的位置,其中,若秒级时间戳的字符串没有这么多字符,可以以0代替。

当然,所述根据所述秒级时间戳的字符串基于混淆算法确定出所述用户uid的字符串在所述秒级时间戳的字符串中的第一插入位置还可以包括:

确定所述秒级时间戳的字符串的第一参照位,所述第一参照位即为所述第一插入位置。

比如,所述秒级时间戳的字符串的第一参照位可以是该字符串中的任意一位,比如首位或末位,当以末位设置为第一参照位时,若秒级时间戳的字符串为20170220151615,那么就是第一参照位的字符就是“5”,然后将户uid的字符串插入秒级时间戳的字符串的末位字符“5”之后的位置。

s103,根据所述服务器当前的微秒级时间戳计算第一标识符,利用加密算法将所述第一标识符转换为第二字符串。

本步骤中,调用系统函数uniqid()方法获取由所述服务器当前的微秒级时间戳计算出的第一标识符,所述第一标识符为唯一的id,但是在分布式高并发的情况下,即使精确到毫秒,id的重复率依然很高。因此还需利用加密算法对所述第一标识符进行加密,才能确保唯一性。例如,所述第一标识符的字符串可以为“4b3403665fea6”。

当计算出第一标识符后,为了降低重复率,还需利用加密算法将所述第一标识符转换为第二字符串,包括:调用函数rand()获取一个整数,所述整数的值在0-99999之间;比如:1001;将所述整数与所述第一标识符进行拼接;通过哈希散列算法md5()将拼接后的字符串转换为所述第二字符串。比如拼接后形成的字符串为:4b3403665fea61001,通过哈希散列算法md5()转换后的第二字符串即为:“856063a71571583eee4b28dc4d4aadf7”。

或者还可以通过base64编码将拼接后的字符串转换为所述第二字符串。

需要说明的是,在根据所述服务器当前的微秒级时间戳计算第一标识符之前,还包括:在所述第一字符串中添加第二标识符,形成第三字符串。

具体地,当获取到第一字符串后,为了与服务器中其他文件进行区分,可以在第一字符串中添加特定的第二标识符,形成第三字符串。比如,所述第一标识符可以是“-upload-”,也可以是其他标识符。

具体地,所述在所述第一字符串中添加第二标识符,形成第三字符串,包括:确定所述第一字符串的第二参照位;获取所述第二参照位对应字符的第二数值;基于所述第二数值确定所述第一字符串中的添加位置;将所述第二标识符添加至所述第一字符串中的所述添加位置处,形成所述第三字符串。

比如,当将字符与ascii码值进行对应转换时,获取到第一字符串的第二参照位,获取第二参照位对应的字符,所述该字符对应的ascii码值,以所述ascii码值为参照值,将所述第二标识符插入第一字符串中的相应位置之后。

这里,所述第一字符串的第二参照位可以是该字符串中的任意一位,比如首位或末位或其他位,当将末位设置为第二参照位时,若第一字符串为“1000020170220151615”,那么第二参照位的字符就是“5”,再获取到“5”对应的ascii码为“53”,然后第二标识符插入第一字符串的第53个字符之后的位置,其中,若第一字符串没有这么多字符,可以以0代替。

当然,在所述第一字符串中添加第二标识符,形成第三字符串还可以包括:确定所述第一字符串的第二参照位,所述第二参照位即为添加位置。

所述第一字符串的第二参照位可以是第一字符串中的任意一位,比如首位或末位,当以末位设置为第二参照位时,若第一字符串为“1000020170220151615”,那么就是第二参照位的字符就是“5”,然后将第一标识符插入所述第一字符串的末位字符“5”之后的位置。那么形成的第三字符串可以为“1000020170220151615-upload-”。

s104,利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名。

本步骤中,当获取到第三字符串后,利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名。

具体地,确定所述第三字符串的第三参照位;获取所述第三参照位的字符;按照预设的第三转换规则将所述第三参照位的字符转换为第三数值;基于所述第三数值确定出所述第二字符串在所述第三字符串中的第二插入位置;将所述第二字符串插入所述第三字符串中的所述第二插入位置,形成第四字符串;所述第四字符串即为所述文件名。

其中,第三转换规则可以包括多种:比如将字符与十进制数值对应转换,将字符与ascii码值进行对应转换。

当将字符与ascii码值进行对应转换时,获取到所述第三字符串的第三参照位,获取第三参照位对应的字符,所述该字符对应的ascii码值,以所述ascii码值为参照值,将所述第二字符串插入所述第三字符串中的相应位置之后。

这里,所述第三字符串的第三参照位可以是该字符串中的任意一位,比如首位或末位或其他位,当以第十五位设置为第三参照位时,若第三字符串为“1000020170220151615-upload”,那么就是第三参照位的字符就是“5”,再获取到“5”对应的ascii码为“53”,然后将第二字符串插入所述第三字符串的第53个字符之后的位置,其中,若第三字符串没有这么多字符,可以以0代替。

当然,这里还可以包括:

确定所述第三字符串的第三参照位,所述第三参照位即为所述第二插入位置。

比如,所述第三字符串的第三参照位可以是该字符串中的任意一位,比如首位或末位,当以末位设置为第三参照位时,若第三字符串为“1000020170220151615-upload”,那么就是第三参照位的字符就是“d”,然后将第二字符串插入第三字符串的末位字符“d”之后的位置,形成第四字符串,所述第四字符串即为所述文件名。

本实施例利用所述服务器当前的微秒级时间戳计算出的第一标识符是已经是精确到毫秒级的,其重名的概率是千分之一,然后进一步利用加密算法将第一标识符转成的第二字符串是绝对不可逆的;最后再利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名,这样就保证了文件名的唯一性。

实施例二

相应于实施例一,本实施例还提供一种生成文件名的装置,如图2所示,所述装置包括:获取单元21、第一转换单元22、计算单元23、第二转换单元24、第三转换单元25及添加单元26;其中,

若用户已经在服务器中登录,那么所述获取单元21就可以获取到用户在服务器中分配的用户标识uid,具体可以通过$_session[‘uid’]获取得到用户标识uid,所述用户标识uid可以为0~65535中的任一数值。例如所述用户标识uid的值可以是10000。

所述获取单元21获取到用户uid后,还需通过调用系统自带方法now()获取服务器当前的秒级时间戳,利用系统函数date()将系统的秒级时间戳转换为年月日时分秒对应格式,再并调用date(‘ymdhis’,now())方法将所述秒级时间戳转换为所述秒级时间戳的字符串$str。例如秒级时间戳的字符串$str可以为20170220151615。

当所述获取单元21获取到上传文件的用户标识及服务器当前的秒级时间戳后,所述第一转换单元22用于利用第一转换规则将所述用户标识及所述秒级时间戳转换为第一字符串。

具体地,所述第一转换单元22首先根据所述秒级时间戳的字符串基于混淆算法确定出所述用户uid的字符串在所述秒级时间戳的字符串中的第一插入位置;将所述用户uid的字符串插入所述秒级时间戳的字符串中的所述第一插入位置。

而所述第一转换单元22在确定第一插入位置时,具体包括:确定所述秒级时间戳的字符串的第一参照位;获取第一参照位对应字符的第一数值;基于所述第一数值确定出所述第一插入位置。

其中,第一转换规则可以包括多种:比如将字符与十进制数值对应转换,将字符与ascii码值进行对应转换。

当将字符与ascii码值进行对应转换时,获取到所述秒级时间戳的字符串的第一参照位,获取第一参照位对应的字符,所述该字符对应的ascii码值,以所述ascii码值为参照值,将所述用户uid的字符串插入所述秒级时间戳的字符串中的相应位置之后。

这里,所述秒级时间戳的字符串的第一参照位可以是该字符串中的任意一位,比如首位或末位,当以末位设置为第一参照位时,若秒级时间戳的字符串为20170220151615,那么就是第一参照位的字符就是“5”,再获取到“5”对应的ascii码为“53”,然后将户uid的字符串插入秒级时间戳的字符串的第53个字符之后的位置,其中,若秒级时间戳的字符串没有这么多字符,可以以0代替。

当然,所述第一转换单元22根据所述秒级时间戳的字符串基于混淆算法确定出所述用户uid的字符串在所述秒级时间戳的字符串中的第一插入位置还可以包括:

确定所述秒级时间戳的字符串的第一参照位,所述第一参照位即为所述第一插入位置。

比如,所述秒级时间戳的字符串的第一参照位可以是该字符串中的任意一位,比如首位或末位,当以末位设置为第一参照位时,若秒级时间戳的字符串为20170220151615,那么就是第一参照位的字符就是“5”,然后将户uid的字符串插入秒级时间戳的字符串的末位字符“5”之后的位置。

当所述第一字符串形成之后,所述计算单元23用于根据所述服务器当前的微秒级时间戳计算第一标识符,所述第二转换单元24用于利用加密算法将所述第一标识符转换为第三字符串。

具体地,所述计算单元23调用系统函数uniqid()方法获取由所述服务器当前的微秒级时间戳计算出的第一标识符,所述第一标识符为唯一的id,但是在分布式高并发的情况下,即使精确到毫秒,id的重复率依然很高。因此还需利用加密算法对所述第一标识符进行加密,才能确保唯一性。例如,所述第一标识符的字符串可以为“4b3403665fea6”。

当计算出第一标识符后,为了降低重复率,所述第二转换单元24还需利用加密算法将所述第一标识符转换为第二字符串,包括:调用函数rand()获取一个整数,所述整数的值在0-99999之间;比如:1001;将所述整数与所述第一标识符进行拼接;通过哈希散列算法md5()将拼接后的字符串转换为所述第二字符串。比如拼接后形成的字符串为:4b3403665fea61001,通过哈希散列算法md5()转换后的第二字符串即为:“856063a71571583eee4b28dc4d4aadf7”。

或者所述第二转换单元24还可以通过base64编码将拼接后的字符串转换为所述第二字符串。

这里,所述装置还包括:添加单元26,在根据所述服务器当前的微秒级时间戳计算第一标识符之前,添加单元26用于:在所述第一字符串中添加第二标识符,形成第三字符串。

具体地,当获取到第一字符串后,为了与服务器中其他文件进行区分,添加单元26可以在第一字符串中添加特定的第二标识符,形成第三字符串。比如,所述第一标识符可以是“-upload-”,也可以是其他标识符。

具体地,所述添加单元26在所述第一字符串中添加第二标识符,形成第三字符串,包括:确定所述第一字符串的第二参照位;获取所述第二参照位对应字符的第二数值;基于所述第二数值确定所述第一字符串中的添加位置;将所述第二标识符添加至所述第一字符串中的所述添加位置处,形成所述第三字符串。

比如,当将字符与ascii码值进行对应转换时,获取到第一字符串的第二参照位,获取第二参照位对应的字符,所述该字符对应的ascii码值,以所述ascii码值为参照值,将所述第二标识符插入第一字符串中的相应位置之后。

这里,所述第一字符串的第二参照位可以是该字符串中的任意一位,比如首位或末位或其他位,当将末位设置为第二参照位时,若第一字符串为“1000020170220151615”,那么第二参照位的字符就是“5”,再获取到“5”对应的ascii码为“53”,然后第二标识符插入第一字符串的第53个字符之后的位置,其中,若第一字符串没有这么多字符,可以以0代替。

当然,在所述第一字符串中添加第二标识符,形成第三字符串还可以包括:确定所述第一字符串的第二参照位,所述第二参照位即为添加位置。

所述第一字符串的第二参照位可以是第一字符串中的任意一位,比如首位或末位,当以末位设置为第二参照位时,若第一字符串为“1000020170220151615”,那么就是第二参照位的字符就是“5”,然后将第一标识符插入所述第一字符串的末位字符“5”之后的位置。那么形成的第三字符串可以为“1000020170220151615-upload-”。

相应的,第三转换单元25用于利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名。具体地,所述第三转换单元25确定所述第三字符串的第三参照位;获取所述第三参照位的字符;按照预设的第三转换规则将所述第三参照位的字符转换为第三数值;基于所述第三数值确定出所述第二字符串在所述第三字符串中的第二插入位置;将所述第二字符串插入所述第三字符串中的所述第二插入位置,形成第四字符串;所述第四字符串即为所述文件名。

其中,第三转换规则可以包括多种:比如将字符与十进制数值对应转换,将字符与ascii码值进行对应转换。

当将字符与ascii码值进行对应转换时,获取到所述第三字符串的第三参照位,获取第三参照位对应的字符,所述该字符对应的ascii码值,以所述ascii码值为参照值,将所述第二字符串插入所述第三字符串中的相应位置之后。

这里,所述第三字符串的第三参照位可以是该字符串中的任意一位,比如首位或末位或其他位,当以第十五位设置为第三参照位时,若第三字符串为“1000020170220151615-upload”,那么就是第三参照位的字符就是“5”,再获取到“5”对应的ascii码为“53”,然后将第二字符串插入所述第三字符串的第53个字符之后的位置,其中,若第三字符串没有这么多字符,可以以0代替。

当然,所述第三转换单元25还用于:

确定所述第三字符串的第三参照位,所述第三参照位即为所述第二插入位置。

比如,所述第三字符串的第三参照位可以是该字符串中的任意一位,比如首位或末位,当以末位设置为第三参照位时,若第三字符串为“1000020170220151615-upload”,那么就是第三参照位的字符就是“d”,然后将第二字符串插入第三字符串的末位字符“d”之后的位置,形成第四字符串,所述第四字符串即为所述文件名。

本实施例提供的生成文件名的方法及装置带来的有益效果至少是:

本发明提供了一种生成文件名的方法及装置,所述方法包括:获取上传文件的用户标识及服务器当前的秒级时间戳;利用第一转换规则将所述用户标识及所述秒级时间戳转换为第一字符串;根据所述服务器当前的微秒级时间戳计算第一标识符;利用加密算法将所述第一标识符转换为第二字符串;利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名;如此,利用所述服务器当前的微秒级时间戳计算出的第一标识符是已经是精确到毫秒级的,其重名的概率是千分之一,然后进一步利用加密算法将第一标识符转成的第二字符串是绝对不可逆的;最后再利用第二转换规则将所述第一字符串及所述第二字符串转换为所述文件名,这样就保证了文件名的唯一性,进而管理员再对文件进行管理时,可以根据唯一的文件名对其进行检索、管理,从而提高了工作效率。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1