2012-01-17 19 views
5

ユーザーがビデオをサーバーのファイルシステムにアップロードするシステムを作成しました。ビデオファイルの固有のファイル名を生成する方法が必要です。私はrandom.getrandbitsを使うべきですか?文字と数字の組み合わせでこれを行う方法はありますか?ランダムなファイル名で安全なURL安全な文字列を生成する

+0

の可能重複http://stackoverflow.com/questions/2257441/python-random-string-generation-with-upper-case-letters-and-digits –

+3

あなたはどのフレームワークを使用していますか?これはしばしばあなたのために処理されます。既存のhttp://docs.python.org/library/tempfile.htmlライブラリに問題がありますか? –

+0

@ S.Lott私は彼が一時的にビデオを保存したいとは思わない。 – Gandaro

答えて

10

これは私が使用するものです。

import base64 
import uuid 

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

私はUUIDを生成するが、私は代わりに、より大きな六角バージョンやダッシュと1のバイトを使用します。次に、URLで安全なbase64文字列にエンコードします。これは、16進数を使用するよりも短い文字列ですが、base64を使用すると、文字列内の文字がファイル、URLおよび他の多くのものにとって安全になります。

1つの問題は、urlsafe_b64encodeを使用しても、常にurl-safeではない最後に「=」サインを付けたいということです。 Pythonの3.6で、

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

これは私が今必要としているものです。ありがとう!ちょうどあなたが低得点の質問へのあなたの答えがインターネット上のランダムな男を助けたことを知りたいと思ったと思った。 –

+0

フィードバックいただきありがとうございます。私たちのために、今までのテストに耐えて、ほぼ1年後には、アプリケーション全体にプライマリ・キーを生成するためにこの小さなコードを使用します。 –

+0

Python 3では、 '.decode( 'utf-8')'をインクルードして、置換を行う文字列を取得しなければならないことに注意してください: 'base64.urlsafe_b64encode(uuid.uuid4()。bytes).decode( 'utf-8 ').replace(' = '、' ') ' – jakewins

1

あなたが使用することができます:あなたが唯一のランダムな文字列を生成しようとしているので、もし「=」sの兆候は、あなたはおそらくそれらを削除safeyすることができ、base-64でエンコードされた情報を復号するためのものです、シークレットモジュール

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

さらにドキュメントはここにある:https://docs.python.org/3/library/secrets.html

関連する問題