如何在erlang yaws中获取唯一文件名

如何在erlang yaws中获取唯一文件名,erlang,yaws,Erlang,Yaws,我正在创建一个在yaws web服务器中使用erlang上传媒体文件(音频、视频和图像)的应用程序。有多个用户可以同时上传文件,所以如何每次都获得唯一的文件名 请向我推荐解决方案。通常,您有两种方法: 1:在数据库中存储一个基本ID(如“a”),它将是下一个上载文件的名称,并且每次添加文件时都会增加ID(“b”、“c”、“aa”、“aa”、…)。例如,这就是youtube或url shortner使用的技术 2:对文件进行散列(使用MD5、SHA1、CRC32等),得到的散列将是服务器上的文件

我正在创建一个在yaws web服务器中使用erlang上传媒体文件(音频、视频和图像)的应用程序。有多个用户可以同时上传文件,所以如何每次都获得唯一的文件名


请向我推荐解决方案。

通常,您有两种方法:

  • 1:在数据库中存储一个基本ID(如“a”),它将是下一个上载文件的名称,并且每次添加文件时都会增加ID(“b”、“c”、“aa”、“aa”、…)。例如,这就是youtube或url shortner使用的技术
  • 2:对文件进行散列(使用MD5、SHA1、CRC32等),得到的散列将是服务器上的文件名。由于每个文件的散列应该是唯一的,所以不应该有名称冲突
散列技术通常是CPU密集型的(因为您需要对上载的每个文件进行散列),但是您可以向客户端提供散列以检查文件的完整性


如果要保留文件的原始名称,则需要一个数据库(如使用erlang时使用mnesia)来存储每个关系(ID->orignal name或Hash->original name)。

通常有两种方法:

  • 1:在数据库中存储一个基本ID(如“a”),它将是下一个上载文件的名称,并且每次添加文件时都会增加ID(“b”、“c”、“aa”、“aa”、…)。例如,这就是youtube或url shortner使用的技术
  • 2:对文件进行散列(使用MD5、SHA1、CRC32等),得到的散列将是服务器上的文件名。由于每个文件的散列应该是唯一的,所以不应该有名称冲突
散列技术通常是CPU密集型的(因为您需要对上载的每个文件进行散列),但是您可以向客户端提供散列以检查文件的完整性


如果要保留文件的原始名称,则需要一个数据库(如使用erlang时使用mnesia)来存储每个关系(ID->orignal name或Hash->original name)。

由于每个文件的Hash应该是唯一的,因此不应该有名称冲突。这是胡说八道。每个散列都有冲突,因为散列的位通常比数据少。不同散列之间的差异是冲突的概率。CRC32已退出辩论。在CRC32中进行碰撞是IT课程幼儿园的一项任务。MD5也不是一个好的选择。有一种已知的方法可以在几秒钟内产生碰撞。对于SHA1,目前还没有一个实用的解决方案,但主要是与MD5一样弱。选择SHA3的SHA2散列族,这更好。我知道,但在这种情况下,为什么要生成冲突?我想,根据您实现上传的方式,您可以覆盖文件,但如果不检查数据库中是否已经存在哈希,那将是非常糟糕的。您的用户将意外地产生冲突。有关更多详细信息,请参阅。你的用户也可能有不好的意图。如果你在数据库中检查你的散列,你会毁掉散列的最大好处之一。可伸缩性!猜猜是什么在用Dropbox,为什么。我不知道。所以生日悖论意味着,与实际存储的文件数量相比,拥有两个具有相同哈希的文件的概率并不是线性增长的?很抱歉,我没有真正理解你评论的最后一部分。生日悖论说,如果你有一个SHA1,它有2^160个唯一的散列,你将存储2^40个文件(万亿个文件),你有大约1/(2^120)的机会意外发生冲突。非常好。它并没有告诉您有意制造碰撞有多容易,这也是您应该使用MD5的原因之一。CRC32不在讨论之列,因为它被以2^32开头的事实打破了。由于哈希值对于每个文件都应该是唯一的,所以不应该有名称冲突。这是胡说八道。每个散列都有冲突,因为散列的位通常比数据少。不同散列之间的差异是冲突的概率。CRC32已退出辩论。在CRC32中进行碰撞是IT课程幼儿园的一项任务。MD5也不是一个好的选择。有一种已知的方法可以在几秒钟内产生碰撞。对于SHA1,目前还没有一个实用的解决方案,但主要是与MD5一样弱。选择SHA3的SHA2散列族,这更好。我知道,但在这种情况下,为什么要生成冲突?我想,根据您实现上传的方式,您可以覆盖文件,但如果不检查数据库中是否已经存在哈希,那将是非常糟糕的。您的用户将意外地产生冲突。有关更多详细信息,请参阅。你的用户也可能有不好的意图。如果你在数据库中检查你的散列,你会毁掉散列的最大好处之一。可伸缩性!猜猜是什么在用Dropbox,为什么。我不知道。所以生日悖论意味着,与实际存储的文件数量相比,拥有两个具有相同哈希的文件的概率并不是线性增长的?很抱歉,我没有真正理解你评论的最后一部分。生日悖论说,如果你有一个SHA1,它有2^160个唯一的散列,你将存储2^40个文件(万亿个文件),你有大约1/(2^120)的机会意外发生冲突。非常好。它并没有告诉您有意制造碰撞有多容易,这也是您应该使用MD5的原因之一。CRC32退出了辩论,因为它被你从2^32开始的事实打破了。