- September 1, 2009
- view attachment send-file download-file mimetype
- 5 (after 5 ratings)
This view snippet is a helper for implementing file download handlers. There is a standard to encode Unicode filenames properly, but many browsers have different protocols.
The default encoding is assumed to be UTF-8.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
import mimetypes from django.http import HttpResponse def respond_as_attachment(request, file_path, original_filename): fp = open(file_path, 'rb') response = HttpResponse(fp.read()) fp.close() type, encoding = mimetypes.guess_type(original_filename) if type is None: type = 'application/octet-stream' response['Content-Type'] = type response['Content-Length'] = str(os.stat(file_path).st_size) if encoding is not None: response['Content-Encoding'] = encoding # To inspect details for the below code, see http://greenbytes.de/tech/tc2231/ if u'WebKit' in request.META['HTTP_USER_AGENT']: # Safari 3.0 and Chrome 2.0 accepts UTF-8 encoded string directly. filename_header = 'filename=%s' % original_filename.encode('utf-8') elif u'MSIE' in request.META['HTTP_USER_AGENT']: # IE does not support internationalized filename at all. # It can only recognize internationalized URL, so we do the trick via routing rules. filename_header = '' else: # For others like Firefox, we follow RFC2231 (encoding extension in HTTP headers). filename_header = 'filename*=UTF-8\'\'%s' % urllib.quote(original_filename.encode('utf-8')) response['Content-Disposition'] = 'attachment; ' + filename_header return response
More like this
- send_file and send_data by danjak 8 years ago
- Decorator to make files downloadable by prigun 6 years, 4 months ago
- Email multiattachment and multireciepments by fordexa 6 years, 6 months ago
- HTML Email with Inline Attachments (images) by hunterford 4 years, 5 months ago
- save file on couchdb with couchdbkit by magik_cypress 3 years ago