diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py index e96ef44550..359d4b5425 100644 --- a/django/core/handlers/wsgi.py +++ b/django/core/handlers/wsgi.py @@ -251,12 +251,7 @@ class WSGIHandler(base.BaseHandler): filelike = open(filename, 'rb') return environ['wsgi.file_wrapper'](filelike, response.block_size) - else: - import os.path - if not os.path.exists(filename): - raise Exception("Filename provided to HttpResponseSendFile does not exist.") - response_headers.append(('Content-Length', - str(os.path.getsize(filename)))) + start_response(status, response_headers) return response diff --git a/django/http/__init__.py b/django/http/__init__.py index 1d4875b2db..55592d628f 100644 --- a/django/http/__init__.py +++ b/django/http/__init__.py @@ -272,6 +272,7 @@ class HttpResponse(object): _status_code = 200 _codec = None + _charset = None def __init__(self, content='', mimetype=None, status=None, content_type=None, request=None): @@ -446,6 +447,8 @@ class HttpResponseSendFile(HttpResponse): self.block_size = block_size self['Content-Disposition'] = ('attachment; filename=%s' % os.path.basename(path_to_file)) + if not settings.HTTPRESPONSE_SENDFILE_HEADER and os.path.exists(path_to_file): + self['Content-Length'] = str(os.path.getsize(path_to_file)) self._empty_content = False def set_empty_content(self): @@ -457,6 +460,11 @@ class HttpResponseSendFile(HttpResponse): from django.core.servers.basehttp import FileWrapper return FileWrapper(self.get_file_handler(), self.block_size) + def _get_content(self): + return "".join(self.iter()) + + content = property(_get_content) + def get_file_handler(self): if not self.sendfile_fh: self.sendfile_fh = open(self.sendfile_filename, 'rb')