FastAPIを使用した基本的なファイルアップロード機能の実装方法

## はじめに
この記事では、Windows 11環境でFastAPIを使って基本的なファイルアップロード機能を実装する方法を解説します。FastAPIは、Pythonで高速かつ効率的なWeb APIを構築するための現代的なフレームワークです。

## 目次

1. 環境設定
2. 基本的なファイルアップロード
3. 動作確認の手順
4. まとめ

## 1. 環境設定 (Windows 11向け)

まず、Windows 11でPythonとFastAPIの環境を設定します。

1. **Pythonのインストール**:
   - [Python公式サイト](https://www.python.org/downloads/)からWindows用のインストーラをダウンロードします。
   - インストール時に「Add Python to PATH」にチェックを入れてください。

2. **必要なパッケージのインストール**:
   コマンドプロンプトを管理者として実行し、以下のコマンドを入力します：

   ```
   pip install fastapi
   pip install python-multipart
   pip install uvicorn
   ```

3. **開発環境の準備**:
   - Visual Studio CodeやPyCharmなどの開発環境をインストールすると便利です。
   - `C:\Work`フォルダを作成します（存在しない場合）。

## 2. 基本的なファイルアップロード

以下は、単一のファイルをアップロードする基本的な実装です。ファイルをC:\Work\uploadsに保存するように設定しています。

```python
from fastapi import FastAPI, File, UploadFile
import shutil
from pathlib import Path

app = FastAPI()

UPLOAD_DIR = Path(r"C:\Work\uploads")

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
    try:
        UPLOAD_DIR.mkdir(parents=True, exist_ok=True)
        save_path = UPLOAD_DIR / file.filename
        
        with save_path.open("wb") as buffer:
            shutil.copyfileobj(file.file, buffer)
        
        return {"filename": file.filename, "save_path": str(save_path)}
    finally:
        file.file.close()

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
```

この例では、アップロードされたファイルを`C:\Work\uploads`フォルダに保存します。具体的には：

1. `UPLOAD_DIR`変数を使用して、保存先ディレクトリを`C:\Work\uploads`に設定しています。
2. `UPLOAD_DIR.mkdir(parents=True, exist_ok=True)`で、指定したディレクトリが存在しない場合に自動的に作成します。
3. ファイルは`C:\Work\uploads\[アップロードされたファイル名]`として保存されます。

注意点：
- アプリケーションを実行するユーザーが`C:\Work\uploads`ディレクトリに書き込み権限を持っていることを確認してください。

## 3. 動作確認の手順 (Windows 11向け)

Windows 11環境での動作確認手順は以下の通りです：

1. **サーバーの起動**:
   - コマンドプロンプトを開きます（Windowsキー + R を押し、「cmd」と入力）。
   - プロジェクトフォルダに移動し、以下のコマンドを実行します：
     ```
     python -m uvicorn main:app --reload
     ```

2. **SwaggerUIでのテスト**:
   - ブラウザ（Edge推奨）で`http://localhost:8000/docs`にアクセスします。
   - FastAPIが自動生成したSwagger UIインターフェースが表示されます。
   - `/uploadfile/`エンドポイントを選択します。
   - "Try it out"ボタンをクリックし、ファイルを選択してアップロードします。

3. **コマンドプロンプト（cmd）でのテスト**:
   Windows 11のコマンドプロンプトを開き、以下のようなコマンドを使用してテストできます：
   ```
   curl -X POST "http://localhost:8000/uploadfile/" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "file=@C:\path\to\your\file.jpg"
   ```
   注意: Windows 10以降には`curl`コマンドが標準で含まれています。

4. **結果の確認**:
   - アップロードが成功した場合、ファイル名や保存パスなどの情報がJSON形式で返されます。
   - アップロードされたファイルは`C:\Work\uploads`フォルダに保存されます。以下の手順で確認できます：
     1. エクスプローラーを開き、アドレスバーに`C:\Work\uploads`と入力します。
     2. フォルダ内にアップロードされたファイルが表示されます。
   - また、コマンドプロンプトを使用して確認することもできます：
     1. コマンドプロンプトを開きます。
     2. `cd C:\Work\uploads`コマンドを実行してアップロードフォルダに移動します。
     3. `dir`コマンドを実行して、アップロードされたファイルを確認します。

## 4. まとめ

この記事では、FastAPIを使用して基本的なファイルアップロード機能を実装する方法を紹介しました。主なポイントは以下の通りです：

FastAPIを使用することで、簡単にファイルアップロード機能を実装できます。
アップロードされたファイルはC:\Work\uploadsフォルダに保存されます。
SwaggerUIやcurlを使用して、実装した機能のテストが簡単に行えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/4c29a278-e873-5340-fef2-6cd4c6afc6f4.png)

ファイルアップロード機能を実装する際は、セキュリティに注意を払うことが重要です。
実装後は、必ず動作確認を行い、期待通りに機能することを確認しましょう。

この基本的な実装を土台に、プロジェクトの要件に合わせてカスタマイズしていくことができます。ファイルアップロード機能は多くのWebアプリケーションで必要とされる機能であり、この知識が皆様のプロジェクトに役立つことを願っています。