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構築の利点を活かしたシンプルな実装が可能です。




コメント