Home >Backend Development >Python Tutorial >How to Serve Downloadable Files with Hidden Paths in Django?

How to Serve Downloadable Files with Hidden Paths in Django?

DDD
DDDOriginal
2024-11-28 11:19:12140browse

How to Serve Downloadable Files with Hidden Paths in Django?

Dynamic File Download with Django

In web applications, it's often necessary to allow users to download files. However, you may want to obscure the file paths to prevent direct access. With Django, you can serve downloadable files with hidden paths.

The Question:

A user wants to create a URL like http://example.com/download/?f=somefile.txt that, when accessed, serves a file located at /home/user/files/somefile.txt without displaying it in the browser.

The Answer:

To achieve this, you can use a combination of the HttpResponse class and the xsendfile module. HttpResponse generates the path to the file or the file itself, while xsendfile handles the actual file serving.

Here's a sample code snippet that demonstrates the integration:

from django.utils.encoding import smart_str
from django.http import HttpResponse

response = HttpResponse(content_type='application/force-download')
response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name)
response['X-Sendfile'] = smart_str(path_to_file)
return response

This solution requires you to have control over your server or ensure that mod_xsendfile (for Apache) or X-Accel-Redirect (for nginx) is set up.

Update for Django 1.7:

The mimetype attribute in the code should be replaced with content_type.

The above is the detailed content of How to Serve Downloadable Files with Hidden Paths in Django?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn