Django FileResponse

last modified January 9, 2023

Django FileResponse tutorial shows how to send a file with FileResponse in 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

We show the current working diretory.

$ tree /f
│   db.sqlite3
│   manage.py
│       settings.py
│       urls.py
│       wsgi.py
│       __init__.py
│       bojnice.jpg
    │   admin.py
    │   apps.py
    │   models.py
    │   tests.py
    │   views.py
    │   __init__.py

These are the contents of the project directory.


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 We should see the image in the browser.

In this article, we have demonstrated how to send a file with Django.