Przesyłanie Django: Odrzuć przesłane duplikaty, użyj istniejącego pliku (sprawdzanie na podstawie md5)

Mam model zFileField, który przechowuje pliki przesłane przez użytkownika. Ponieważ chcę zaoszczędzić miejsce, chciałbym uniknąć duplikatów.

Co chciałbym osiągnąć:

Obliczać przesłane plikisuma kontrolna md5Zapisz plik za pomocąnazwa pliku na podstawie jego md5sumJeśli plik o tej nazwie już istnieje (nowy plik to aduplikować),odrzuć przesłany plik i zamiast tego użyj istniejącego pliku

1 i2 już działa, alejak mógłbym zapomnieć o przesłanym duplikacie i zamiast tego użyć istniejącego pliku?

Zauważ, że chciałbymzachowaj istniejący plik inie nadpisz go (głównie po to, aby czas modyfikacji był taki sam - lepiej dla kopii zapasowej).

Uwagi:

Używam Django 1.5Program ładujący todjango.core.files.uploadhandler.TemporaryFileUploadHandler

Kod:

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)

Każda pomoc jest doceniana!

questionAnswers(4)

yourAnswerToTheQuestion