response.file() 功能:Sanic 返回檔案資料給瀏覽器,以此實現檔案下載功能。
response.file() 語法
async def file(
location,
status=200,
mime_type=None,
headers=None,
filename=None,
_range=None,
):
讀寫檔案是一個IO操作,所以這是一個非同步函式,使用時記得加await
。
response.file() 引數
- location:響應要返回的檔案的路徑;
- status:預設 http 狀態碼200,正常返回不要修改;
- mime_type:檔案格式;
- headers:自定義 http 響應頭;
- filename:如果傳值則寫入響應頭headers的
Content-Disposition
; _range
:指定檔案的某一部分;
這裡面,location
是必需的引數;
可以通過傳入headers
來自定義響應頭;
如果沒有傳入mime_type
引數,其內部會使用模組mimetypes
的mimetypes.guess_type()
函式通過filename
來獲得;
_range
物件需要有四個屬性:start, end, size, total
來描述擷取檔案中的某一部分。
response.file() 返回值
返回一個HTTPResponse
類的例項。多數情況下,路由函式直接返回這個例項。當需要再進一步處理響應(比如,設定響應cookies)時,要把它賦值給一個變數。
response.file() 例子
from sanic import Sanic
from sanic import response
app = Sanic()
@app.route('/file')
async def file(request):
return await response.file(
'./welcom-to-猿人學.jpg',
headers={'X-Serverd-By': 'YuanRenXue Python'}
)
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8888, debug=True)
通過echo
建立一個假的jpg檔案,其內容為“Welcom to 猿人學Python”,再通過curl
來檢視file響應:
echo "Welcom to 猿人學Python" > ./welcom-to-猿人學.jpg
curl -i http://127.0.0.1:8888/file
結果如下,可以看到我們自定義的headersX-Serverd-By: YuanRenXue Python
:
HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: 5
X-Serverd-By: YuanRenXue Python
Content-Length: 10
Content-Type: image/jpeg
Welcom to 猿人學Python
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***