Here is how to setup/install mod_xsendfile in Apache2 + Django (mod_wsgi).
First do this to install apxs2
$> sudo apt-get install apache2-prefork-dev
Download mod_xsendfile: http://tn123.ath.cx/mod_xsendfile/
Install it by doing this:
$> apxs2 -cia mod_xsendfile.c
If you get an error compiling mod_xsendfile just ignore it, see: ubuntu forums
After installing…
$> cd /etc/apache2/mods-available $> sudo vi xsendfile.load
Put this inside the “xsendfile.load”
LoadModule xsendfile_module /usr/lib/apache2/modules/mod_xsendfile.so
Save and exit Vi.
Open your httpd conf file or the equivalent and add “XSendFile On” and “XSendFilePath /home/path/”. See example:
#/etc/apache2/sites-available/client.test.com <VirtualHost x.x.x.x:80> ServerAdmin wenbert@test.com ServerName client.test.com ServerAlias www.client.test.com DocumentRoot /home/client/public_html/ XSendFile On XSendFilePath /home/client/storage WSGIScriptAlias / /home/client/application/django.wsgi <Directory /home/client/application> Order allow,deny Allow from all </Directory> Alias /robots.txt /home/client/public_html/robots.txt Alias /favicon.ico /home/client/public_html/favicon.ico Alias /images /home/client/public_html/images Alias /static /home/client/public_html/static Alias /admin_media /home/client/public_html/admin_media ErrorLog /home/client/logs/error.log CustomLog /home/client/logs/access.log combined </VirtualHost>
Enable the xsendfile by using this command:
$> sudo a2enmod xsendfile
Then restart apache.
$> sudo /etc/init.d/apache2 restart
What it will look like in your views.py
@login_required def download(request,filename): """ Download a file "filename" must be a full path: /path/to/my/file.txt """ #It's a good idea to check if the user is allowed access to the file here. response = HttpResponse(mimetype='application/force-download') response['Content-Disposition']='attachment;filename="%s"' %smart_str(filename) response["X-Sendfile"] = filename response['Content-length'] = os.stat(filename).st_size return response |
Credits:
Codeutopia
ubuntu forums
Stackoverflow
Thank you! Wery nice blog
Pingback: eKini Web Developer Blog » Django: Reading an image outside the public accessible directory and displaying the image through the browser