Added 3rd party sendfile app
This commit is contained in:
0
3rd_party_apps/sendfile/backends/__init__.py
Normal file
0
3rd_party_apps/sendfile/backends/__init__.py
Normal file
13
3rd_party_apps/sendfile/backends/chunked_file.py
Normal file
13
3rd_party_apps/sendfile/backends/chunked_file.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from django.http import HttpResponse
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
|
||||
def sendfile(request, filename):
|
||||
return = HttpResponse(IterFile(filename))
|
||||
|
||||
class IterFile(object):
|
||||
def __init__(self, filename):
|
||||
self.file = SimpleUploadedFile(name=filename, content=open(filename).read())
|
||||
|
||||
def __iter__(self):
|
||||
return self.file.chunks()
|
||||
|
||||
15
3rd_party_apps/sendfile/backends/development.py
Normal file
15
3rd_party_apps/sendfile/backends/development.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from django.views.static import serve
|
||||
|
||||
import os.path
|
||||
|
||||
def sendfile(request, filename):
|
||||
'''
|
||||
Send file using django dev static file server.
|
||||
|
||||
DO NOT USE IN PRODUCTION
|
||||
this is only to be used when developing and is provided
|
||||
for convenience only
|
||||
'''
|
||||
dirname = os.path.dirname(filename)
|
||||
basename = os.path.basename(filename)
|
||||
return serve(request, basename, dirname)
|
||||
30
3rd_party_apps/sendfile/backends/mod_wsgi.py
Normal file
30
3rd_party_apps/sendfile/backends/mod_wsgi.py
Normal file
@@ -0,0 +1,30 @@
|
||||
from django.http import HttpResponse
|
||||
|
||||
from django.conf import settings
|
||||
import os.path
|
||||
|
||||
def _convert_file_to_url(filename):
|
||||
# CURRENTLY NOT WORKING
|
||||
# mod_wsgi wants a relative URL not a filename
|
||||
# so apache does an internal redirect
|
||||
|
||||
relpath = os.path.relpath(filename, settings.SENDFILE_ROOT)
|
||||
|
||||
url = [settings.SENDFILE_URL]
|
||||
|
||||
while relpath:
|
||||
relpath, head = os.path.split(relpath)
|
||||
url.insert(1, head)
|
||||
|
||||
return u''.join(url)
|
||||
|
||||
def sendfile(request, filename):
|
||||
response = HttpResponse()
|
||||
response['Location'] = _convert_file_to_url(filename)
|
||||
# need to destroy get_host() to stop django
|
||||
# rewriting our location to include http, so that
|
||||
# mod_wsgi is able to do the internal redirect
|
||||
request.get_host = lambda: ''
|
||||
|
||||
return response
|
||||
|
||||
6
3rd_party_apps/sendfile/backends/simple.py
Normal file
6
3rd_party_apps/sendfile/backends/simple.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.core.servers.basehttp import FileWrapper
|
||||
from django.http import HttpResponse
|
||||
|
||||
def sendfile(request, filename):
|
||||
wrapper = FileWrapper(file(filename))
|
||||
return HttpResponse(wrapper)
|
||||
8
3rd_party_apps/sendfile/backends/xsendfile.py
Normal file
8
3rd_party_apps/sendfile/backends/xsendfile.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from django.http import HttpResponse
|
||||
|
||||
def sendfile(request, filename):
|
||||
response = HttpResponse()
|
||||
response['X-Sendfile'] = filename
|
||||
|
||||
return response
|
||||
|
||||
Reference in New Issue
Block a user