@KIN1991
Python, PHP developer

Как в django отдать медиа файл?

Всем привет, собственно вопрос по сабжу.
Есть файлы разных форматов, как их можно отдать на скачивание из view(controller)?
Нужно что то типо
views.py
def get_file(request):
    file object = ....
    return file_object
  • Вопрос задан
  • 6940 просмотров
Решения вопроса 3
suguby
@suguby
программист, python, django, mysql, git, hg, linux
ктт
from django.core.servers.basehttp import FileWrapper

def get_file(request):
    filename = '...'
    content_type = 'application/vnd.ms-excel'
    file_path = os.path.join(store_path, filename)
    response = HttpResponse(FileWrapper(file(file_path)), content_type=content_type)
    response['Content-Disposition'] = 'attachment; filename=%s' % (
        filename.encode('utf-8') if isinstance(filename, unicode) else filename,
    )
    response['Content-Length'] = os.path.getsize(path)
    return response
Ответ написан
Комментировать
un1t
@un1t
Если на дев сервере нужно отдавать media то, нужно добавить в urls.py

from django.conf.urls.static import static
from django.conf import settings

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


Если же ты действительно хочешь отдавать файлы через вьюху, то вот так
stackoverflow.com/questions/8600843/serving-large-...
Ответ написан
Комментировать
def get_document(request, file_link):
    document = get_object_or_None(Document, link=file_link, users=request.user.id)
    if document:
        return serve(request,
                     path=document.document.name,
                     document_root=settings.USERS_DOCUMENT_ROOT)
    return HttpResponse('Error!')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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