2011-12-28 2 views
2

사용자가 장고 관리자를 통해 이미지를 업로드하고, 이미지를 메모리에 자르고 크기를 조정 (아마 PIL을 사용하여) 한 다음 로컬 파일 시스템에 이미지를 저장하지 않고 Amazon S3에 저장할 수있게하려고합니다. 내 데이터베이스에 이미지 경로를 저장하겠습니다.하지만 이미지가 로컬에 저장되는 유일한 방법입니다. 이 특수 이미지 업로드 위젯을 관리자 편집 페이지의 일반 모델 양식에 통합하고 싶습니다.Django 관리자에게 이미지를 업로드하고 자르고 크기를 조정 한 다음 파일을 로컬에 저장하지 않고 Amazon S3로 보냅니다.

This question은 솔루션이 관리 인터페이스를 사용하지 않는다는 점을 제외하고는 비슷합니다.

저장 작업을 가로 채고 이미지를 S3로 저장하고 저장 한 다음 이미지 경로와 나머지 모델 데이터를 정상적으로 저장하는 방법이 있습니까? 이미지 데이터에 액세스 할 수 있다면 이미지를 자르고 크기를 조정하고 S3에 저장하는 방법에 대해 잘 알고 있습니다. 당신은 가능성이 조정 FILE_UPLOAD_MAX_MEMORY_SIZE 매개 변수는 사용자의 요구에 맞게 수

답변

4

는 이미지가 특정 크기보다 작은 경우 https://docs.djangoproject.com/en/dev/topics/http/file-uploads/#changing-upload-handler-behavior

에서, 이미 전용 메모리에 저장됩니다 참조하십시오. 또한 업로드 된 이미지의 .path 필드에 액세스하지 못하게해야합니다. 업로드 된 이미지가 파일에 기록되기 때문입니다. 대신, (예를 들어) .read() 메서드를 사용하십시오. 나는이 테스트를하지 않은,하지만 난이 일 것으로 예상 :

image = PIL.Image(request.FILES['my_file']) 
+0

이것은 매우 유용합니다. 그러나 장고 관리자를 사용하고 있다면이 줄을 어디에 넣을까요? – davidscolgan

+0

그렇지 않을 것입니다. 가장 간단한 방법은'ThumbnailingImageField' (아마도'ImageField'의 하위 클래스)라는 새로운 모델 필드를 만드는 것입니다.이 모델 필드는 이미지의 썸네일을 만들어 풀 사이즈 이미지와 함께 저장합니다. –

+0

또한 S3에 저장하는 vi와 함께 : http://stackoverflow.com/questions/5044982/django-storage-backend-for-s3 –

0

당신이 다음() 메소드 저장 모델에서 확장 정의 할 수 있습니다 장고의 관리 부분을 터치하지 않으려는 잘합니다. 그러나 장고에서 ImageField를 사용할 때. 장고는 실제로 당신을 위해 절약 할 수 있습니다. 사용할 수있는 높이 및 너비 옵션이 있습니다. S3에 업로드를 들어

https://docs.djangoproject.com/en/dev/ref/models/fields/#imagefield

정말에서 장고 - 스토리지 백엔드를 사용하는 것이 좋습니다 :

https://bitbucket.org/david/django-storages/src (바람직 S3-BOTO 버전)

당신은 기본적으로 코드를 작성할 필요가 없습니다 그 방법 당신 자신. 사람들이 테스트 한 사용 가능한 라이브러리와 솔루션 만 사용할 수 있습니다.

관련 문제