Merge pull request #327 from kuhnchris/dev-file-plrovider

(dev only) allow file download directly from django
This commit is contained in:
meeb 2023-02-12 23:46:24 +11:00 committed by GitHub
commit b3f93ddef7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 35 additions and 6 deletions

View File

@ -1,8 +1,10 @@
import os import os
import json import json
from base64 import b64decode from base64 import b64decode
import pathlib
import sys
from django.conf import settings from django.conf import settings
from django.http import Http404 from django.http import FileResponse, Http404, HttpResponseNotFound
from django.views.generic import TemplateView, ListView, DetailView from django.views.generic import TemplateView, ListView, DetailView
from django.views.generic.edit import (FormView, FormMixin, CreateView, UpdateView, from django.views.generic.edit import (FormView, FormMixin, CreateView, UpdateView,
DeleteView) DeleteView)
@ -694,6 +696,33 @@ class MediaContent(DetailView):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
self.object = self.get_object() self.object = self.get_object()
# development direct file stream - DO NOT USE PRODUCTIVLY
if settings.DEBUG and 'runserver' in sys.argv:
# get media URL
pth = self.object.media_file.url
# remove "/media-data/"
pth = pth.split("/media-data/",1)[1]
# remove "/" (incase of absolute path)
pth = pth.split(str(settings.DOWNLOAD_ROOT).lstrip("/"),1)
# if we do not have a "/" at the beginning, it is not a absolute path...
if len(pth) > 1:
pth = pth[1]
else:
pth = pth[0]
# build final path
filepth = pathlib.Path(str(settings.DOWNLOAD_ROOT) + pth)
if filepth.exists():
# return file
response = FileResponse(open(filepth,'rb'))
return response
else:
return HttpResponseNotFound()
else:
headers = { headers = {
'Content-Type': self.object.content_type, 'Content-Type': self.object.content_type,
'X-Accel-Redirect': self.object.media_file.url, 'X-Accel-Redirect': self.object.media_file.url,