【Python3】FastAPIでファイルのダウンロードを行う方法
おはこんばんにちは、せなです。
今回はFastAPIでファイルのダウンロードを行う方法を解説したいと思います。
フォルダ構成
今回の説明で使うフォルダ構成を簡単に載せておきますね。
- main.py
- files
- hoge.txt
ソースコードについて
まず、忙しい人のためにソースコードを載せておきます。
説明については、後述していきますので、より理解したい方は下までお読みください。
import uvicorn
from fastapi import FastAPI
from fastapi.responses import FileResponse
from pathlib import Path
from datetime import datetime
app = FastAPI()
@app.get("/files/{filename:path}")
async def download_file(filename: str):
current = Path()
file_path = current / "files" / filename
response = FileResponse(
path=file_path,
filename=f"download_{datetime.now().strftime('%Y%m%d%H%M%S')}_{filename}"
)
return response
if __name__ == "__main__":
uvicorn.run("main:app", port=8000, reload=True)
ソースコードの解説
上記のPGは以下のURLにアクセスするとファイルをダウンロードすることができます。
http://127.0.0.1:8000/files/hoge.txt
@app.get("/files/{filename:path}")
async def download_file(filename: str):
filesの後のパスパラメーターにファイル名を入れるわけですね。
currrentに現在のディレクトリ位置を設定
file_pathにファイルのディレクトリ絶対パスが設定されます。
current = Path()
file_path = current / "files" / filename
FileResponseに必要なファイルのパスを設定
ダウンロードする際の名前を「download_現在日時_filename」としています。
最後にFileResponseオブジェクトを返却するとユーザーのブラウザ上ではダウンロードが開始されます。
response = FileResponse(
path=file_path,
filename=f"download_{datetime.now().strftime('%Y%m%d%H%M%S')}_{filename}"
)
return response
FileResponse()についてはドキュメントを見るのが分かりやすいと思います。
コチラを参考にしてみてください。
最後に
今回はファイルをダウンロードする際の方法について説明してみました。
アップロードする際の方法については以下で説明していますので、よければご覧ください。
ではでは〜
ディスカッション
コメント一覧
まだ、コメントがありません