From: yomguy Date: Mon, 17 Sep 2012 11:08:33 +0000 (+0200) Subject: add send_file filewrapper for various exports X-Git-Tag: 1.4.4-lam~19^2^2~3 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=a518d680008251a8df7557d3613d0b2b70418fdf;p=telemeta.git add send_file filewrapper for various exports --- diff --git a/README.rst b/README.rst index 7b8cd4e7..37f73510 100644 --- a/README.rst +++ b/README.rst @@ -172,7 +172,7 @@ To get the lastest development version, you need subversion and run:: License ======= -CeCILL v2, compatible with GPL v2 (see `LICENSE `_) Sponsors diff --git a/telemeta/views/base.py b/telemeta/views/base.py index c4f93899..30ad004d 100644 --- a/telemeta/views/base.py +++ b/telemeta/views/base.py @@ -65,6 +65,7 @@ from django.utils.translation import ugettext from django.contrib.auth.forms import UserChangeForm from django.core.exceptions import ObjectDoesNotExist from django.contrib.syndication.views import Feed +from django.core.servers.basehttp import FileWrapper from telemeta.models import * import telemeta.models @@ -84,6 +85,22 @@ mods = {'item': MediaItem, 'collection': MediaCollection, # TOOLS +class FixedFileWrapper(FileWrapper): + def __iter__(self): + self.filelike.seek(0) + return self + +def send_file(request, filename, content_type='image/jpeg'): + """ + Send a file through Django without loading the whole file into + memory at once. The FileWrapper will turn the file object into an + iterator for chunks of 8KB. + """ + wrapper = FixedFileWrapper(file(filename, 'rb')) + response = HttpResponse(wrapper, content_type=content_type) + response['Content-Length'] = os.path.getsize(filename) + return response + def render(request, template, data = None, mimetype = None): return render_to_response(template, data, context_instance=RequestContext(request), mimetype=mimetype)