美文网首页
谈谈文件唯一标识的生成

谈谈文件唯一标识的生成

作者: elef | 来源:发表于2019-03-06 11:19 被阅读19次

在我们使用百度云盘上传文件的时候,有的时候一个上百兆甚至更大的文件,秒级上传。这其中一定是云盘识别了文件的唯一标识,所以根本就无需上传,直接提示的上传成功。这不仅在使用云盘服务的时候感受到了急速体验,也极大的节省后台的存储资源。
这里的说的文件唯一标识不是文件的名字唯一,而是说用一段字符串来唯一标识出文件的内容。之前也接参考过一套源码文件上传服务,每个上传的文件都是采用MD5计算出文件唯一名称,将文件存储在服务器的一个文件目录下,每次上传新文件,都会先根据文件MD5标识查重。
不论文件大小,MD5都会生成一个固定长度的字符串,例如我这里生成的都是这样的32位字符串831a3cf0f43dc6b1f12a75fa22ed3bf5。说实话,这个名字太长,当然存储在后台的磁盘里也没啥关系,但是如果放到URL中,或是文本编辑器中

URL中的文件 编辑器中的文件

将上面两个图中的文件标识提出来对比下

http://elef.top/831a3cf0f43dc6b1f12a75fa22ed3bf5.png (32位)
https://jianshu/5833359-7edc5133cc79aa42.png (7 + 1 + 16 = 24位)

第一个文件标识采用md5算法生成,虽然保证了文件的唯一,但是明显过长。
第二个文件标识采用两种算法生成,左侧7位采用CRC32生成,右侧16位应该是md5算法生成后截取的一半。

第二个标识生成的规则给出了一个新的思路,采用md5和crc32两种算法相结合,再进行适当的截取字符串,这样即可以保证标识的唯一性也能有效的减少字符串的长度。

md5和crc32有啥区别

简单来说,crc32算法比md5算法在对同样一个文件进行摘录,耗时短,但同时摘录的信息量也少,所以只能做初筛选。对比多个文件是否重复的时候,首先采用crc32算法,如果两个文件的crc32摘录不一样,那两个文件肯定不重复,但是如果crc32摘录一样,那也不能说明两个文件重复。这时,md5摘录可以做进一步对比,这样对比的结果才是确定的。

相关文章

  • 谈谈文件唯一标识的生成

    在我们使用百度云盘上传文件的时候,有的时候一个上百兆甚至更大的文件,秒级上传。这其中一定是云盘识别了文件的唯一标识...

  • 导入资源时Unity的内部处理

    1. 生成资源的唯一ID 这个ID用来唯一标识此资源,用来确定对其的引用。 2. 生成资源对应的.meta文件 资...

  • CocosCreator-meta文件使用总结

    Creator的的资源管理 CocosCreator会为每个资源文件生成一个唯一ID,称为uuid(通用唯一标识符...

  • 课堂笔记day11(文件属性,which、whereis、PAT

    1.文件属性:文件的大小、时间、类型、权限、属主 1.1索引节点:文件的唯一标识 1.2进程号: 进程的唯一标识 ...

  • PHP uniqid() 生成不重复唯一标识

    这种方法生成的唯一标识中没有重复。

  • 模仿java中的雪花算法

    做商品生成订单的时候经常需要唯一标识,模仿一下雪花算法的oc版本。首先声明.h文件中引入c语言文件 .m文件中实现...

  • nsq源码(7) nsqd messageID

    messageID 消息唯一标识 GenerateID()返回ID NewGUID()生成ID

  • 自定义UUID-移动设备唯一标识

    自定义UUID-移动设备唯一标识 目的 希望自主生成用于所有移动业务上标识设备唯一性的标识符 作用 业务支撑、日活...

  • nanoid

    nanoid是一个可以生成唯一标识的前端库,使用方式如下: 第一步:下载 第二步文件中引入

  • MD5使用说明

    部分平台把文件的MD5值做为文件的唯一标识,犹如身份证是人的唯一标识。 问题1:修改后的文件在哪里?怎么保存? 答...

网友评论

      本文标题:谈谈文件唯一标识的生成

      本文链接:https://www.haomeiwen.com/subject/fyxtpqtx.html