2012-01-17 209 views
5

我创建了一个系统,用户上传视频到我的服务器的文件系统,我需要一种方法来为视频文件生成唯一的文件名。我应该使用random.getrandbits吗?有没有办法用字母和数字的组合来做到这一点?生成随机的文件名安全和URL安全的字符串

+0

的可能重复http://stackoverflow.com/questions/2257441/python-random-string-generation-with-upper-case-letters-and-digits – 2012-01-17 16:53:17

+3

你在使用什么框架?通常这是为你处理的。现有的http://docs.python.org/library/tempfile.html库有什么问题? – 2012-01-17 16:53:29

+0

@ S.Lott我不认为他想暂时存储视频。 – Gandaro 2012-01-17 17:31:41

回答

10

这是我用:

import base64 
import uuid 

base64.urlsafe_b64encode(uuid.uuid4().bytes) 

我生成一个UUID,但是我用的是字节而不是更大的十六进制版本或一个破折号。然后我将它编码成一个URL安全的base-64字符串。这是一个比使用十六进制字符串更短的字符串,但是使用base64可以使字符串中的字符对文件,URL和其他大部分内容都是安全的。

一个问题是,即使使用urlsafe_b64encode,它总是希望'='的标志到不那么安全的网页。在'=的迹象都为base-64编码信息进行解码,所以如果你只是想生成随机字符串,那么你或许可以safey与删除:

str.replace('=', '') 
+2

这完全是我现在需要的;谢谢!只是以为你想知道你对低分问题的答案仍然帮助互联网上的随机人员。 – 2013-07-20 22:49:42

+0

感谢您的反馈。对于我们来说,迄今为止它已经经受了时间的考验,它差不多一年后,我们仍然使用这个小小的代码来在整个应用程序中生成主键。 – 2013-07-21 18:33:42

+0

注意,在Python 3中,我必须包含'.decode('utf-8')'来获取一个字符串来替换:'base64.urlsafe_b64encode(uuid.uuid4()。bytes).decode('utf-8 ').replace('=','')' – jakewins 2017-05-18 14:11:19

相关问题