Send file in for aiohttp.web (http server for asyncio)

aiohttp, asyncio, python
pip install aiohttp-send==0.0.9



Pypi codecov

Send file in aiohttp


Python 3.6 only now (function arguments type hint does not work in 3.5)

pip install aiohttp aiohttp-send


  • max_age Browser cache max-age in milliseconds. (defaults to 0)
  • immutable Tell the browser the resource is immutable and can be cached indefinitely. (defaults to False)
  • hidden Allow transfer of hidden files. (defaults to True)
  • root Root directory to restrict file access.
  • index Name of the index file to serve automatically when visiting the root location. (defaults to None)
  • gzip Try to serve the gzipped version of a file automatically when gzip is supported by a client and if the requested file with .gz extension exists. (defaults to False).
  • brotli Try to serve the brotli version of a file automatically when brotli is supported by a client and if the requested file with .br extension exists. (defaults to False).
  • format If not False (defaults to True), format the path to serve static file servers and not require a trailing slash for directories, so that you can do both /directory and /directory/.
  • extensions Try to match extensions from passed array to search for file when no extension is sufficed in URL. First found is served. (defaults to False)

Root path

Note that root is required, defaults to '' and will be resolved, removing the leading / to make the path relative and this path must not contain "..", protecting developers from concatenating user input. If you plan on serving files based on user input supply a root directory from which to serve from.

For example to serve files from ./public:

async def index(request: web.Request):
    return await send(request, request.path, root='./public', format=True)

    web.get('/{tail:.*}', index),


from aiohttp import web
from aiohttp_send import send

app = web.Application()

async def index(request):
    return await send(request, 'index.html')

    web.get('/', index),

web.run_app(app, port=8888)

This project comes from koajs/send.