40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
import imghdr
|
|
from wsgiref.util import FileWrapper
|
|
|
|
import structlog
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.http import HttpResponse, StreamingHttpResponse
|
|
from django.shortcuts import get_object_or_404
|
|
from wagtail.images.exceptions import InvalidFilterSpecError
|
|
from wagtail.images.models import SourceImageIOError
|
|
|
|
from vbv_lernwelt.media_files.models import UserImage
|
|
|
|
logger = structlog.get_logger(__name__)
|
|
|
|
|
|
@login_required
|
|
def user_image(request, image_id):
|
|
image = get_object_or_404(UserImage, id=image_id)
|
|
|
|
filter_spec = request.GET.get("filter", "original")
|
|
|
|
try:
|
|
rendition = image.get_rendition(filter_spec)
|
|
except SourceImageIOError:
|
|
return HttpResponse(
|
|
"Source image file not found", content_type="text/plain", status=410
|
|
)
|
|
except InvalidFilterSpecError:
|
|
return HttpResponse(
|
|
"Invalid filter spec: " + filter_spec,
|
|
content_type="text/plain",
|
|
status=400,
|
|
)
|
|
|
|
rendition.file.open("rb")
|
|
image_format = imghdr.what(rendition.file)
|
|
return StreamingHttpResponse(
|
|
FileWrapper(rendition.file), content_type="image/" + image_format
|
|
)
|