0Pricing
FastAPI Backend Development Bootcamp · レッスン

フォームデータとファイルアップロード

FastAPIの組み込み機能を使って、従来のHTMLフォームデータを処理し、ファイルアップロードを実装します。

「フォームデータとファイルアップロード」はCoddyKit上の無料FastAPI Backend Development Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFastAPI Backend Development Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 FastAPI Backend Development Bootcampコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

Form Data Basics

When you fill out a web form (like a login or registration page) and click "submit," the data you entered is often sent as form data.

This is a traditional way for browsers to send information to a server, different from sending JSON in a request body.

Form data can be sent in two main ways:

  • application/x-www-form-urlencoded: For simple key-value pairs.
  • multipart/form-data: Used when files are involved, or for larger, more complex data.

FastAPI's Form Dependency

FastAPI makes handling form data easy using the Form dependency from fastapi.

It works similarly to Query or Path parameters, but it tells FastAPI to expect the data in the request body as form fields.

You import it like this: from fastapi import FastAPI, Form.

Basic Form Endpoint Example

Let's create an endpoint that accepts a username and password as form data. Notice how username and password are explicitly marked with Form(...).

This tells FastAPI to parse them from the form body, not as JSON or query parameters.

from fastapi import FastAPI, Form
import uvicorn

app = FastAPI()

@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
    return {"username": username, "message": "Login successful!"}

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

Interacting with Form Data

You can test this endpoint using tools like curl or by creating a simple HTML form. The -d flag in curl sends form data.

Make sure your FastAPI application from the previous scene is running!

curl -X POST "http://127.0.0.1:8000/login/" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "username=coddy&password=secret"

File Uploads Explained

Uploading files (like images, documents, or videos) is a common web task. This type of data is sent using multipart/form-data encoding.

FastAPI provides special tools to handle these uploads efficiently, allowing you to access file contents and metadata.

FastAPI's UploadFile

For file uploads, FastAPI uses the UploadFile class (from fastapi) along with the File dependency.

When you declare a parameter with File(...) and type-hint it as UploadFile, FastAPI handles the file stream.

  • filename: The name of the uploaded file.
  • content_type: The file's MIME type (e.g., image/jpeg).
  • file: A SpooledTemporaryFile object, allowing you to read its contents.
from fastapi import FastAPI, File, UploadFile
import uvicorn

app = FastAPI()

@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
    return {"filename": file.filename, "content_type": file.content_type}

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

Saving One Uploaded File

After receiving an UploadFile, you can read its content and save it to a local disk or cloud storage. Here's how to save it locally.

Remember to handle potential errors during file operations.

from fastapi import FastAPI, File, UploadFile
import uvicorn
import shutil
import os

app = FastAPI()

# Ensure the 'files' directory exists
os.makedirs("files", exist_ok=True)

@app.post("/uploadandsave/")
async def upload_and_save_file(file: UploadFile = File(...)):
    file_location = f"files/{file.filename}"
    with open(file_location, "wb+") as file_object:
        shutil.copyfileobj(file.file, file_object)
    return {"message": f"File '{file.filename}' saved at '{file_location}'"}

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

Uploading Many Files

What if you need to upload several files at once? FastAPI supports this by allowing you to define a parameter as a list of UploadFile.

Each file in the list will be an UploadFile object, which you can then process individually.

from fastapi import FastAPI, File, UploadFile
from typing import List
import uvicorn

app = FastAPI()

@app.post("/uploadmultiple/")
async def create_upload_files(files: List[UploadFile] = File(...)):
    uploaded_filenames = [file.filename for file in files]
    return {"filenames": uploaded_filenames, "message": "Files received!"}

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

Saving Multiple Uploads

Similar to single files, you can iterate through the list of UploadFile objects and save each one. This is useful for photo galleries or document uploads.

Always ensure proper error handling and secure file storage practices in a real application.

from fastapi import FastAPI, File, UploadFile
from typing import List
import uvicorn
import shutil
import os

app = FastAPI()

# Ensure the 'files' directory exists
os.makedirs("files", exist_ok=True)

@app.post("/uploadandsavemultiple/")
async def upload_and_save_multiple_files(files: List[UploadFile] = File(...)):
    saved_files = []
    for file in files:
        file_location = f"files/{file.filename}"
        with open(file_location, "wb+") as file_object:
            shutil.copyfileobj(file.file, file_object)
        saved_files.append(file.filename)
    return {"message": f"Successfully uploaded: {', '.join(saved_files)}"}

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

Form & File Check

You've learned about handling form data and file uploads. Let's test your understanding!

Lesson Summary

Great job! In this lesson, you mastered how to handle traditional form data and robust file uploads in FastAPI.

  • We used Form(...) for simple key-value form fields.
  • We explored UploadFile and File(...) for single and multiple file uploads.
  • You learned to save uploaded files to your server.

These techniques are crucial for building interactive web applications. Keep practicing!

よくある質問

「フォームデータとファイルアップロード」レッスンは無料ですか?

はい。「フォームデータとファイルアップロード」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、FastAPI Backend Development Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 FastAPI Backend Development Bootcampコースには全4レッスンが含まれています。

「フォームデータとファイルアップロード」で何を学びますか?

FastAPIの組み込み機能を使って、従来のHTMLフォームデータを処理し、ファイルアップロードを実装します。 ブラウザで直接実行するハンズオンコードでFastAPI Backend Development Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

FastAPI Backend Development Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのFastAPI Backend Development Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「フォームデータとファイルアップロード」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このFastAPI Backend Development Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのFastAPI Backend Development Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. リクエストボディ用Pydanticモデル
  2. レスポンスモデルとステータスコード
  3. フォームデータとファイルアップロード
  4. ヘッダー、Cookie、カスタムレスポンス
← FastAPI Backend Development Bootcampに戻る