Add file streaming section to the streaming documentation page
This commit is contained in:
		| @@ -119,3 +119,25 @@ async def index(request): | |||||||
| ``` | ``` | ||||||
|  |  | ||||||
| If a client supports HTTP/1.1, Sanic will use [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding); you can explicitly enable or disable it using `chunked` option of the `stream` function. | If a client supports HTTP/1.1, Sanic will use [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding); you can explicitly enable or disable it using `chunked` option of the `stream` function. | ||||||
|  |  | ||||||
|  | ## File Streaming | ||||||
|  |  | ||||||
|  | Sanic provides `sanic.response.file_stream` function that is useful when you want to send a large file. It returns a `StreamingHTTPResponse` object and will use chunked transfer encoding by default; for this reason Sanic doesn't add `Content-Length` HTTP header in the response. If you want to use this header, you can disable chunked transfer encoding and add it manually: | ||||||
|  |  | ||||||
|  | ```python | ||||||
|  | from aiofiles import os as async_os | ||||||
|  | from sanic.response import file_stream | ||||||
|  |  | ||||||
|  | @app.route("/") | ||||||
|  | async def index(request): | ||||||
|  |     file_path = "/srv/www/whatever.png" | ||||||
|  |  | ||||||
|  |     file_stat = await async_os.stat(file_path) | ||||||
|  |     headers = {"Content-Length": str(file_stat.st_size)} | ||||||
|  |  | ||||||
|  |     return await file_stream( | ||||||
|  |         file_path, | ||||||
|  |         headers=headers, | ||||||
|  |         chunked=False, | ||||||
|  |     ) | ||||||
|  | ``` | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 andreymal
					andreymal