2010-04-30 4 views
3

내 Django 응용 프로그램에서 보안 된 사진을 제공하고 싶습니다. 사진은 공공 소비를위한 것이 아니며, 로그인 한 사용자 만 볼 수있는 기능을 원합니다. 나는 난독 화 된 파일 아이디 (사진에 긴 숫자의 UUID를 부여 함)에 의지하고 싶지 않고 내 미디어 폴더에 숨겨져있는 것으로 간주하고 싶지 않습니다. 내 데이터베이스의 디스크에 사진을 안전하게 저장하고 인증 된 세션으로 스트리밍하는 방법은 무엇입니까?Django : 비밀번호로 사진 URL을 보호 하시겠습니까?

답변

2

이미지의 MIME 유형으로 HttpResponse을 생성 한 다음 이미지 파일을 이미지 파일에 쓰거나 복사하여이 작업을 수행 할 수 있습니다.

간단한 버전은 다음과 같이 수 :

또한
from django.http import HttpResponse 

@your_favourite_permission_decorator 
def image(request): 
    response = HttpResponse(mimetype='image/png') 

    with open("image.png") as img: 
     response.write(img.read()) 
    return response 

example for PDF filesPIL이 예를 참조하십시오.

+0

그러나 분명히 장고 앱이 상당히 많은 작업을 수행해야합니다. –

6

X-Sendfile 헤더를 사용하여 프런트 엔드 서버에 실제로 어떤 서버에 파일을 보낼지 알려줍니다.

@check_permissions 
def image(request): 
    response = HttpResponse(mimetype='image/png')  
    response['X-Sendfile'] = "/real/path/to/image.png" 
    return response 

여기는 related question입니다. Satchmo가 다운로드 가능한 제품 개체를 게재하는 방법을보고 real world implementation을 볼 수도 있습니다.

nginx 및 lighttpd는 X-Sendfile 대신 X-Accel-Redirect 및 X-LIGHTTPD-send-file을 사용합니다.

+0

내장 서버에서는 작동하지 않는 것 같습니다. 그게 맞습니까? 아니면 제가 잘못하고있는 것입니까? – Debilski

+0

아니요, 내장 서버가 그런 것을 지원하지 않을 것입니다.하지만 어쨌든 프로덕션 환경에서 사용되지 않아야합니다. devel-server가 필요한 경우 설정으로 제공 할 수 있습니다. –

+0

맞습니다. X-Sendfile 헤더 항목은 기본적으로 중량이 많은 백엔드 서버에서 경량 프런트 엔드 서버로 전송되는 내부 리디렉션입니다. – istruble

관련 문제