私はFileField
というモデルを持っています。私はスペースを節約したいので、私は重複を避けたいと思います。Djangoアップロード:アップロードされた重複を破棄し、既存のファイルを使用します(md5ベースのチェック)
:
- 計算アップロードされたファイルMD5チェックサム
- ストアそのmd5sumを
- に基づいてファイル名を持つファイルの場合その名前のファイルがすでに存在しています(新しいファイルのはと重複しています)、アップロードされたファイルを破棄して、既存のファイルを使用する代わりに、
とが既に取り組んでいるが、はどのように私は、アップロードされた重複を忘れるだろうし、代わりに、既存のファイルを使用できますか?私は( - バックアップのためのより良い主に同じ更新時刻を保つために)それを上書きしませ既存のファイルを維持し、したい
注意。
注:
def media_file_name(instance, filename):
h = instance.md5sum
basename, ext = os.path.splitext(filename)
return os.path.join('mediafiles', h[0:1], h[1:2], h + ext.lower())
class Media(models.Model):
orig_file = models.FileField(upload_to=media_file_name)
md5sum = models.CharField(max_length=36)
...
def save(self, *args, **kwargs):
if not self.pk: # file is new
md5 = hashlib.md5()
for chunk in self.orig_file.chunks():
md5.update(chunk)
self.md5sum = md5.hexdigest()
super(Media, self).save(*args, **kwargs)
どれHEL:
- 私は、アップロード・ハンドラが
django.core.files.uploadhandler.TemporaryFileUploadHandler
コードでDjangoの1.5
どのくらいのトラフィックを取得する予定ですか?小規模なプロジェクトやプライベートプロジェクトの場合は、Amazon S3、Rackspace Cloudfiles、または他の安価なファイルストアの月額$ 0.50以上をフォークすることができます。 –