welcome32
@welcome32
Backend Python developer

Как выдать картинку как результат не используя static?

Есть картинка в определенной папке.
Как не используя статичные файлы (по запросу) вернуть картинку как результат запроса (не по её названию, а, допустим, по её номеру)?
P.s. примерно как загрузить страницу (идет вызов функции с необходимыми параметрами, передаваемыми в url, в результате чего возвращается нужная картинка)
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
deepblack
@deepblack
Например так (естественно требуется допилить под ваши нужды, но идея ясна):
spoiler
import os
import mimetypes
from django.http import StreamingHttpResponse
from django.core.servers.basehttp import FileWrapper


def download_file(request):
   the_file = '/some/file/name.png'
   filename = os.path.basename(the_file)
   chunk_size = 8192
   response = StreamingHttpResponse(FileWrapper(open(the_file, 'rb'), chunk_size),
                           content_type=mimetypes.guess_type(the_file)[0])
   response['Content-Length'] = os.path.getsize(the_file)    
   response['Content-Disposition'] = "attachment; filename=%s" % filename
   return response


Примеры реализации:
https://docs.djangoproject.com/en/2.2/howto/output...
https://www.programcreek.com/python/example/52439/...

P.S. Вместо
from django.core.servers.basehttp import FileWrapper

используйте from wsgiref.util import FileWrapper
В Django > 1.8 его нет.

class wsgiref.util.FileWrapper(filelike, blksize=8192)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы