生成随机文件名安全和 URL 安全的字符串
我创建了一个系统,用户可以把视频上传到我服务器的文件系统里。现在我需要一种方法来为这些视频文件生成独一无二的文件名。我应该使用random.getrandbits这个方法吗?有没有什么办法可以用字母和数字的组合来实现这个呢?
3 个回答
9
在Python 3.6中,你可以使用一个叫做secrets的模块。
>>> import secrets
>>> secrets.token_urlsafe(8)
'Pxym7N2zJRs'
更多的文档可以在这里找到:https://docs.python.org/3/library/secrets.html
11
这是我使用的方法:
import base64
import uuid
base64.urlsafe_b64encode(uuid.uuid4().bytes)
我生成一个uuid(通用唯一识别码),但我用的是字节格式,而不是更长的十六进制格式或者带有破折号的格式。然后,我把它编码成一个适合网址的base-64字符串。这样生成的字符串比用十六进制的要短,而且使用base64编码后,字符串里的字符在文件、网址和其他地方都比较安全。
一个问题是,即使使用了urlsafe_b64encode,它总是会在末尾加上'='符号,这个符号在网址中不太安全。'='符号是用来解码base-64编码的信息的,所以如果你只是想生成随机字符串,那么你可以安全地把它们去掉,方法是:
str.replace('=', '')
3
看看这个叫做通用唯一识别码 (UUID)
的东西,还有Python里面的一个模块uuid
。