Django FileResponse
last modified January 9, 2023
Django FileResponse tutorial shows how to send a file with FileResponse in Django.
Django
Django is a high-level Python web framework. It encourages rapid development and clean, pragmatic design. Django's primary goal is to ease the creation of complex, database-driven websites.
Django is maintained by the Django Software Foundation.
Django FileResponse
FileResponse is a subclass of StreamingHttpResponse optimized
for binary files. The file is automatically close.
from django.http import FileResponse
response = FileResponse(open('myfile.png', 'rb'))
FileResponse accepts any file-like object with binary content.
Django FileResponse example
In the following example, we create a Django application that sends
a file to the client. The file is a JPEG image, which
is located in the images directory in the project
root directory.
$ mkdir fileresponse $ cd fileresponse $ mkdir src images $ cd src
We create the project and the images and src subdirectories.
Then we locate to the src directory.
$ django-admin startproject fileresponse .
We create a new Django project in the src directory.
Note: If the optional destination is provided, Django will use that existing directory as the project directory. If it is omitted, Django creates a new directory based on the project name. We use the dot (.) to create a project inside the current working directory.
$ django-admin startapp sendfile
We create a new app. The sendfile application contains the functionality
to send the image to the client.
$ cd .. $ pwd /c/Users/Jano/Documents/pyprogs/django/fileresponse
We show the current working diretory.
$ tree /f
src
│ db.sqlite3
│ manage.py
│
├───fileresponse
│ settings.py
│ urls.py
│ wsgi.py
│ __init__.py
│
├───images
│ bojnice.jpg
│
└───sendfile
│ admin.py
│ apps.py
│ models.py
│ tests.py
│ views.py
│ __init__.py
│
└───migrations
__init__.py
These are the contents of the project directory.
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sendfile',
]
...
Inside the setting.py file, we add the sendfile
component to installed apps.
from django.contrib import admin
from django.urls import path
from sendfile.views import send_file
urlpatterns = [
path('admin/', admin.site.urls),
path('', send_file, name='send_file'),
]
We add a new route for the root page; it calls the
send_file function from the sendfile
component.
from django.http import FileResponse
def send_file(response):
img = open('images/bojnice.jpg', 'rb')
response = FileResponse(img)
return response
Inside send_file, we read the image and return it
to the client in FileResponse object.
$ python manage.py runserver
We run the server and navigate to http://127.0.0.1:8000/.
We should see the image in the browser.
In this article, we have demonstrated how to send a file with Django.