【问题标题】:Generate random filename-safe and URL-safe string生成随机文件名安全和 URL 安全字符串
【发布时间】:2012-02-12 11:38:42
【问题描述】:

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

【问题讨论】:

  • 你用的是什么框架?通常这是为您处理的。现有的docs.python.org/library/tempfile.html 库有什么问题?
  • @S.Lott 我认为他不想暂时存储视频。
  • 文件名没有任何“临时性”。它们可以在/tmp 文件系统之外。
  • 我其实是想暂时保存视频...应该可以预览(播放),然后上传到youtube,然后应该删除原始视频。

标签: python string random


【解决方案1】:

您可以在 Python 3.6 中使用秘密模块。

>>> import secrets
>>> secrets.token_urlsafe(8)
'Pxym7N2zJRs'

更多文档在这里:https://docs.python.org/3/library/secrets.html

【讨论】:

    【解决方案2】:

    这是我用的:

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

    我生成了一个 uuid,但我使用字节而不是更大的十六进制版本或带有破折号的版本。然后我将它编码为一个 URL 安全的 base-64 字符串。这是一个比使用 hex 长度更短的字符串,但使用 base64 使得字符串中的字符对于文件、url 和大多数其他东西都是安全的。

    一个问题是,即使使用 urlsafe_b64encode,它也总是希望将 '=' 符号放在末尾,这不是 url 安全的。 '=' 符号用于解码 base-64 编码信息,因此如果您只是尝试生成随机字符串,那么您可以使用以下方法安全地删除它们:

    str.replace('=', '')
    

    【讨论】:

    • 这正是我现在所需要的;谢谢!只是想你想知道你对一个低分问题的回答仍然帮助了互联网上的一个随机的人。
    • 感谢您的反馈。对我们来说,到目前为止,它经受住了时间的考验,差不多一年后,我们仍然使用这个小代码片段在整个应用程序中生成主键。
    • 请注意,在 Python 3 上,我必须包含 .decode('utf-8') 才能获得要替换的字符串:base64.urlsafe_b64encode(uuid.uuid4().bytes).decode('utf-8').replace('=', '')
    【解决方案3】:

    看看Universally unique identifiers (UUID)和Python的模块uuid

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-07
      • 2015-10-23
      • 1970-01-01
      • 2017-01-15
      • 2018-11-26
      • 1970-01-01
      • 2021-09-03
      • 2012-08-24
      相关资源
      最近更新 更多