用于标识用户文件的唯一字符串

Unique string to identify user file

我们有一个多台机器协同工作的系统。在某些时候,他们需要创建图像并将其上传到媒体服务器。这个媒体服务器只是一个提供静态文件的网络服务器。我们不想显示每张图片的增量id,所以我们需要混淆图片名称。

因为每台机器都有一个唯一的用户,我们只跟踪生成的 url 我们决定使用 HMAC-SHA256(secret, user_id) 为每个图像生成文件名。

这会产生具有这种名称的图像:b3dbaea7adef41e8ecbeaa0cd8ec02d57f0334a6e003271d5e334ae2e46b4285.jpg

这不是最漂亮的解决方案,但目前确实有效。

因为一些业务的变化,现在我们需要更频繁地生成这张图片,我们需要为每个用户创建文件夹。

我怎样才能保持唯一的文件路径又不会太大,同时避免图像名称或用户文件夹之间的冲突

我想避开这种路径:b3dbaea7adef41e8ecbeaa0cd8ec02d57f0334a6e003271d5e334ae2e46b4285/b3dbaea7adef41e8ecbeaa0cd8ec02d57f0334a6e003271d5e334ae2e46b4285.jpg

MD5 与 SHA256 相比,生成的字符串长度只有 SHA256 的一半左右;如果您将它用于目录和文件名,那么您的路径与当前的实现一样长。

另一个想法:使用的字符 space 比文件和目录名称允许的字符(36 或 62,取决于您是否允许这两种情况,并且坚持字母数字),因此您可以将哈希映射到更小的字符串,而不会增加冲突的可能性。