2012-06-10 2 views
4

필자는 최근 장고django가 모델 맞춤 저장, 최선의 방법으로 업로드 된 파일에 액세스하고 있습니까?

내가 저장 기능 모델에 ImageMagick를 통해 업로드 된 파일을 실행할 수 있도록하려면

을 사용하여 experiementing되고,이 때문에 인스턴스가 있었다 때까지 파일을 사용할 수없는 수 없었습니다 실현 나는 그것의 다른 필드

이를 달성하기 위해 더 나은 방법이 있나요

을 채워 일단 저장하여 다시는 저장이 다음 다음 업로드 된 파일에 액세스 할 수있는 시작이라고했다 일하고있어

를 저장? 그냥 좀 두 번

class uploadedFiles(models.Model): 
orignal_image = models.FileField(upload_to='userimages/') 
user = models.ForeignKey(User) 
description = models.TextField(blank=True) 


def __unicode__(self,force_insert=False, force_update=False): 
    return "%s uploaded by %s" % (self.orignal_image.path, self.user) 

def save(self, force_insert=False, force_update=False): 
    super(uploadedFiles, self).save() 
    s = '' 
    cmd = subprocess.Popen(['identify', '-verbose', self.orignal_image.path], stdout=subprocess.PIPE) 
    for line in cmd.stdout: 
     s += line 
    self.description = s 
    super(uploadedFiles, self).save() 

답변

-1

사용 장고의 pre_save 신호 (docs는, 장고의 설명서도 Signals 참조) 저장 함수를 호출 잘못된 느낌 :

from django.db.models.signals import pre_save 
from myapp.models import MyModel 

def do_something(sender, **kwargs): 
    pass 
pre_save.connect(do_something, sender=MyModel) 

장고 지금 MyModel 객체를 저장하기 전에 do_something를 호출합니다.

0

이미징 라이브러리 기능을 사용하여 이미지 메타 데이터를 수집하는 것이 좋습니다. 그런 다음 이미지 필드의 FileStorage 인스턴스에서 이미지 데이터를 읽으면됩니다. documentation of file uploads을 확인하십시오. 또한 Django의 ImageField을 사용할 때 업로드 된 파일이 올바른 이미지 파일인지 확인하기 위해 ImageField 코드를 확인하여 이미지에 대한 추가 정보를 얻습니다.

모델에 clean 메서드를 정의하면이 모델의 save 메서드를 호출하기 직전에 호출됩니다. clean에서 PIL 함수를 사용하여 이미지 필드의 데이터 스트림을 확인하여 메타 데이터를 얻거나 (데이터 스트림을 허용하는 한 이 아닌 실제 파일) 메타 데이타의 설명 필드

Django의 Storage API를 사용하면 로컬 파일 시스템에 저장된 파일이 아니라 Amazon S3와 같은 클라우드에 저장된 파일에서 메타 데이터를 추출 할 수 있으므로 코드를 배포 전반에 걸쳐 훨씬 쉽게 이식 할 수 있습니다.