Kullanıcı tarafından yüklenen dosyaları tutan bir FileField
modelim var. Yerden tasarruf etmek istediğim için, kopyalardan kaçınmak istiyorum.Django yüklemeleri: Yüklenen kopyaları sil, varolan dosyayı kullan (md5 tabanlı onay)
elde etmek istiyorum Ne:
- hesaplayın yüklenen dosyalar MD5 sağlama onun md5sum dayalı dosya adıyla
- Mağaza dosyasını
- ise Bu ada sahip bir dosya zaten var (yeni dosya bir yinelenen), Yüklenen dosyayı atmak ve mevcut dosyasını kullanmak yerine
ve zaten çalışıyor, ancak nasıl Yüklenen yinelenen unutmak istiyorum ve bunun yerine varolan dosyayı kullanmak? Ben ve üzerine yazmak değil varolan bir dosyayı tutmak istiyorum
Not (çoğunlukla aynı modifiye zaman tutmak için - daha iyi yedekleme için).
Notlar:
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)
Herhangi hel:
- Django 1.5
- kullanıyorum yükleme işleyicisi
django.core.files.uploadhandler.TemporaryFileUploadHandler
Kod olduğu p takdir edilir!
Ne kadar trafik almayı planlıyorsunuz? Küçük bir proje veya özel bir proje ise, Amazon S3 veya Rackspace Cloudfiles veya 0,50 $/ay için başka bir ucuz dosya deposu için 0,50 $/ay'ın üzerinde bir çare yapabilirsiniz. –