1

そこで、一度に複数の画像をアップロードできるギャラリーWebページを作成しました。問題は、アップロードされるすべての画像が[username] _ [unixtimestamp].jpgのようなファイル名を取得するように作成したことです。

アップロードされたすべての画像を表示すると、画像は日付で並べ替えられます。当初、これは多くの画像をアップロードするときに問題でした。なぜなら、それらはすべて非常に類似した日時スタンプを取得したからです。同じ秒まで。get_next_by_date()とget_previous_by_date()を使用して画像を参照していましたが、同じ秒に多くの画像が保存されている場合、これはうまく機能しませんでした。

もう1つの問題は、画像処理が通常1秒あたり3つの画像の速度で行われたため、3つと3つの画像が同じUNIXタイムスタンプを取得することでした。これにより、1秒間に最初に処理された同じ画像が、同じ1秒間に後で処理された他の画像ではなく、サイト上で3回表示されました。(オペレーティングシステムは、名前がすでに使用されていることを検出したときにファイルに別の名前を付けましたが、データベースは元のタイムスタンプをファイル名に保存していました)。

これまでのところ、各画像が処理された後にtime.sleep(1)をポップして、各画像に対して新しい秒が開始されることを保証することで問題を「修正」しましたが、これは気分が悪くなります。アップロードされる60枚の画像は60秒かかることが保証されていますが、おそらく10〜20秒以上かかることはありません。

誰かがこれに対する解決策を考えることができますか?日付で並べ替えられた画像が画像を表示するときに正しい順序を取得できること、およびUNIXタイムスタンプがすべての画像に対して一意になることを確認するにはどうすればよいですか?

4

3 に答える 3

1

最も安全な方法は、ファイル名にハッシュを追加することです。これにより、攻撃者がファイル名を推測することも防止されます。これは通常は良いことです。

def upload_to_name(instance, filename):
    name = hashlib.sha1(str(instance.id) + str(random.random())).hexdigest()
    return 'path_to_the_folder/%s.%s' % (path, name, filename.split('.')[-1])
于 2012-08-21T12:08:07.647 に答える
0

タイムスタンプにミリ秒を追加します。それが役に立たない場合-ファイル名に画像ハッシュを追加します。

于 2012-08-21T10:54:14.703 に答える
0

ミリ秒を使用してタイムスタンプからファイル名を作成することもできます。

ミリ秒で使用strftimeしてファイル名の文字列を作成します。

>>>import datetime from datetime
>>>date1=datetime.utcnow()
>>>date1.strftime("%Y_%m_%d_%H_%M_%S_%f")
'2012_08_21_05_55_25_302249'
于 2012-08-21T11:06:15.853 に答える