from typing import Annotated from fastapi import APIRouter, File, Form, Request, UploadFile from src.templates import templates router = APIRouter() @router.get('/') def get_view(request: Request): return templates.TemplateResponse( 'sample_send_file.html', { 'request': request } ) @router.post('/') # file.readがCoroutineが返ってくるため、必ずasync関数にする async def post_view( # formからファイルを受け取る。(formタグにenctype="multipart/form-data"を指定すること) file: Annotated[UploadFile, File()], message: str = Form() ): # ファイルを読み込む(Coroutineが取れるため、必ずawaitする) file_bytes = await file.read() # 閉じとく await file.close() # 読み込んだファイルはbytesで返ってくるので、デコードする file_content = file_bytes.decode() print(file_content) try: return { # ファイル名 "file_name": file.filename, # ファイルのバイト数 "file_size": file.size, # Content-Type "file_content_type": file.content_type } except Exception: return {'code': 'fail'}