2013-06-10 3 views
1

장고 ImageField에 이미지를 업로드해야하지만 타사 API를 기반으로하는 제한으로 인해 하위 디렉토리없이 이미지가 미디어 디렉토리에 업로드되어야합니다.서브 디렉토리없이 장고 미디어에 이미지를 업로드하는 방법

제한 사항은 이미지 필드 열에 로컬로 저장된 파일 이름이 미디어 API에서 해당 이미지를 요청하기 위해 해시를 계산하는 데 사용되므로 필드에 파일 이름과 같은 이름이 있어야한다는 제한 때문입니다. API, 불행히도 API 파일 이름에는 슬래시를 포함 할 수 없습니다.

DB에 필드를 추가하여 실제 파일 이름을 저장할 수 없으며 계산 된 해시를 반환하는 코드를 제어 할 수 없습니다.

나는 upload_to 필수 오류를 해결하는 것으로 보이는 빈 문자열을 반환하는 호출 가능 파일을 만들려고했지만 이미지는 모두 '공백 _1, _2 ... 등으로 저장됩니다. 나머지 이미지 이름.

나는 모든 아무 소용이

그래서 TL (오류 또는 잘못된 파일 이름의 다양한)에 upload_to 리턴 '/', '../media', '../media/'을 만드는 시도

; DR 하위 디렉토리없이 이미지를 MEDIA_ROOT에 직접 저장하는 방법은 무엇입니까? 아직도 분명히을 절약 할 수 있지만,

from django.core.files.storage import FileSystemStorage 

media_root_store = FileSystemStorage(location='/path/to/media/parent') 

class MyModel(models.Model): 
    img_file = models.ImageField(
     max_length=255, 
     upload_to='media', 
     storage=media_root_store) 

이 더러운 해킹은 올바른 위치에 이미지를 저장 :

편집, 추가 정보 :

그래서 난 그냥 그것의 일부 않는 작은 해킹 시도 미디어/첨부 된 이미지 경로. 그래서 그것이 실제로 더 가까워지면 나는 확신 할 수 없다.

답변

0

는 단순히 파일 이름 인수를 반환 호출 upload_to을 지정하면 내 이전 시도에서 오류가 꽤 큰 단서 (하나 개 생성 _1, _2 등)

있었다 밝혀, 다음 이미지가 될 것입니다 MEDIA_ROOT에 직접 저장되며 데이터베이스에 올바른 파일 이름이 저장됩니다 (디렉토리 접두어 제외).

나는 upload_to가 MEDIA_ROOT에 추가 할 경로를 제공한다는 인상을 받았다. 그러면 MEDIA_ROOT에 이미지 파일 이름이 추가된다. 이것이 잘못된 것으로 밝혀졌습니다.