FastAPIで画像アップロードAPIを作成し、Windowsからcurlで送信する方法


この記事はプロモーションを含みます。

FastAPIを使って画像アップロードAPIを作成し、Linuxサーバーに保存。Windowsからcurlで画像を送信する方法を解説します。

はじめに

Webアプリケーションで画像をアップロードする機能は、よく必要とされる機能の一つです。
今回は、PythonのFastAPIを使用して、画像をLinuxサーバーにアップロードして保存するAPIを作成し、Windows端末からcurlコマンドで画像を送信する方法を紹介します。

FastAPIとUvicornのインストールと構築については以下で解説しています。

必要なパッケージのインストール

画像アップロードのためにpython-multipartをインストールする必要があります。
以下のコマンドを実行することでインストールできます。

[root@localhost work]# pip install python-multipart
Collecting python-multipart
  Downloading python_multipart-0.0.20-py3-none-any.whl (24 kB)
Installing collected packages: python-multipart
Successfully installed python-multipart-0.0.20

FastAPIサーバの実装

次に、FastAPIを使って画像を受信し、指定したローカルディレクトリに保存するAPIを作成します。

from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse
import shutil
import os

app = FastAPI()

# 画像を保存するディレクトリの設定
UPLOAD_DIRECTORY = "/home/work"

# 画像受信エンドポイント
@app.post("/upload/")
async def upload_image(file: UploadFile = File(...)):
    # 保存先のファイルパスを設定
    file_location = os.path.join(UPLOAD_DIRECTORY, file.filename)

    # 画像を保存
    with open(file_location, "wb") as buffer:
        shutil.copyfileobj(file.file, buffer)

    # 成功レスポンスを返す
    return JSONResponse(content={"message": f"File '{file.filename}' saved successfully!"}, status_code=200)

上記のコードでは、/upload/エンドポイントで画像ファイルを受け取って、指定したディレクトリに保存します。保存先のパスは適切に変更してください。

サーバの起動

次に、サーバーを起動します。

uvicorn main:app --host 0.0.0.0 --port 8000

これで、FastAPIサーバーがポート8000で待機し、画像のアップロードを受け付ける準備が整いました。

Windows端末からcurlで画像を送信

次に、Windows端末から画像を送信する方法を紹介します。
ここでは、コマンドプロンプトでcurlコマンドを実行します。

curl -X POST http://{サーバーのIPアドレス}:8000/upload/ -F "file=@画像ファイルのフルパス"

実行例です。

C:\Workspace>curl -X POST http://123.123.123.123:8000/upload/ -F "file=@C:\Workspace\image01.jpg"
{"message":"File 'image01.jpg' saved successfully!"}

コマンドの実行結果に「saved successfully!」と表示され、
サーバー側に送信した画像が保存されていれば正常に動作しています。

まとめ

今回の記事では、FastAPIを使用して画像アップロードAPIを作成し、Windows端末からcurlコマンドで画像を送信する方法を紹介しました。
この方法を使うことで、簡単にファイルアップロード機能を実装できます。
さらに、FastAPIの高速で効率的なAPI構築の利点を活かしたシンプルな実装が可能です。

コメント

タイトルとURLをコピーしました