カテゴリ: Flask 更新日: 2025/11/29

Flaskでフロントエンドからファイルアップロードを行う基本手順【初心者向け】

Flaskでフロントエンドからファイルアップロードを行う基本手順
Flaskでフロントエンドからファイルアップロードを行う基本手順

先生と生徒の会話形式で理解しよう

生徒

「先生、Flaskを使ってWebアプリを作っているんですけど、ユーザーが画像やPDFをアップロードできるようにしたいんです。どうやって実装すればいいですか?」

先生

「良いテーマだね。Flaskではとても簡単にファイルアップロードを実装できるんだ。フロントエンド(HTML側)でファイルを選び、Flask側で受け取って保存する流れを作ればいいんだよ。」

生徒

「なるほど。でも、HTMLでファイルを送るってどうやるんですか?」

先生

「それもすごく簡単!一つずつ手順を追ってやってみよう!」

1. Flaskでファイルアップロードをする仕組みとは?

1. Flaskでファイルアップロードをする仕組みとは?
1. Flaskでファイルアップロードをする仕組みとは?

ファイルアップロードとは、ユーザーのパソコンやスマートフォンからサーバーにファイルを送ることを言います。例えば、プロフィール画像をアップロードしたり、履歴書を送信したりする時に使われています。

Flaskでは、フロントエンド(HTMLフォーム)で送られたファイルを、Pythonのrequest.filesという仕組みを使って受け取ります。そして、save()メソッドでサーバーに保存します。

この基本を理解すれば、画像アップロードやドキュメント提出フォームなど、さまざまなアプリを作ることができます。

2. Flaskの準備をしよう

2. Flaskの準備をしよう
2. Flaskの準備をしよう

まずはFlaskをインストールしましょう。ターミナル(またはコマンドプロンプト)で以下のコマンドを実行します。


pip install flask

これでFlaskを使う準備ができました。

3. Flaskでファイルを受け取るPythonコード

3. Flaskでファイルを受け取るPythonコード
3. Flaskでファイルを受け取るPythonコード

次に、FlaskアプリケーションのPythonコードを書いていきましょう。


from flask import Flask, request, render_template
import os

app = Flask(__name__)

# アップロードしたファイルを保存するフォルダを指定
UPLOAD_FOLDER = 'uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

@app.route('/')
def index():
    return render_template('upload.html')

@app.route('/upload', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        return 'ファイルが見つかりません。'

    file = request.files['file']

    if file.filename == '':
        return 'ファイルが選択されていません。'

    # ファイルを保存
    filepath = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
    file.save(filepath)

    return f'アップロードが完了しました!保存先: {filepath}'

if __name__ == '__main__':
    app.run(debug=True)

このコードでは、request.filesを使ってアップロードされたファイルを取得しています。そしてfile.save()で指定フォルダに保存しています。

4. フロントエンド(HTML)でファイルを送信する

4. フロントエンド(HTML)でファイルを送信する
4. フロントエンド(HTML)でファイルを送信する

Flaskと連携するためのHTMLファイルを作成します。templatesフォルダの中にupload.htmlという名前で保存してください。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Flask ファイルアップロード</title>
</head>
<body class="p-4">
    <h2>ファイルをアップロードしてみよう!</h2>
    <form action="/upload" method="POST" enctype="multipart/form-data">
        <input type="file" name="file" class="form-control mb-3">
        <button type="submit" class="btn btn-primary">アップロード</button>
    </form>
</body>
</html>

ここで重要なのは、enctype="multipart/form-data"という指定です。これは、「ファイルを含むデータを送ります」という意味です。これを忘れると、ファイルがサーバーに送られません。

5. 実際に動かしてみよう!

5. 実際に動かしてみよう!
5. 実際に動かしてみよう!

すべてのファイルを保存したら、ターミナルで次のコマンドを実行します。


python app.py

その後、ブラウザで http://127.0.0.1:5000 にアクセスしてみましょう。ファイルを選択して「アップロード」ボタンを押すと、uploadsフォルダにファイルが保存されます。

6. アップロード可能なファイルを制限しよう

6. アップロード可能なファイルを制限しよう
6. アップロード可能なファイルを制限しよう

セキュリティのために、アップロードできるファイルの種類を制限することも大切です。例えば、画像ファイル(jpg, png, gif)のみ許可したい場合は、次のようにします。


ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/upload', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        return 'ファイルが見つかりません。'
    file = request.files['file']
    if file.filename == '':
        return 'ファイルが選択されていません。'
    if file and allowed_file(file.filename):
        filepath = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
        file.save(filepath)
        return f'画像のアップロードに成功しました!保存先: {filepath}'
    else:
        return '許可されていないファイル形式です。'

このようにすることで、不要なファイルのアップロードを防ぐことができます。安全なWebアプリを作るためには、とても重要なポイントです。

7. ファイルアップロード機能の応用例

7. ファイルアップロード機能の応用例
7. ファイルアップロード機能の応用例

Flaskのファイルアップロード機能は、さまざまな場面で使えます。

  • ユーザーのプロフィール画像の登録
  • レポートや履歴書の提出フォーム
  • Web上で写真を共有するサービス

例えば、SNS風のWebアプリを作るときにも、画像をアップロードして表示する仕組みをこの方法で簡単に作ることができます。

8. ファイルアップロードでよくあるエラーと対処法

8. ファイルアップロードでよくあるエラーと対処法
8. ファイルアップロードでよくあるエラーと対処法

初心者がつまずきやすいのが、「ファイルが保存されない」や「ファイルが見つからない」というエラーです。原因の多くは、次の3つです。

  • enctype="multipart/form-data"の指定を忘れている
  • UPLOAD_FOLDERのフォルダが存在しない
  • file.filenameが空になっている

これらを確認すれば、ほとんどのエラーは解決します。焦らず一つずつチェックしてみましょう。

カテゴリの一覧へ
新着記事
New1
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
New2
Flask
Flask×Flask-SocketIOでチャットアプリを作る流れを初心者向けにやさしく解説
New3
Flask
Flaskアプリの作り方を基礎から学ぼう!初心者が覚えるべき開発の流れとは?
New4
Flask
Flask-WTFでファイルアップロードフォームを完全ガイド!初心者でもわかる画像やPDFのアップロード方法
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Flask
Flask-Loginでユーザー認証を完全ガイド!初心者でもわかるログイン処理の作り方
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.5
Java&Spring記事人気No5
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.6
Java&Spring記事人気No6
Python
Pythonでリストを文字列に変換する方法を完全ガイド!初心者でもわかるjoinの使い方
No.7
Java&Spring記事人気No7
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.8
Java&Spring記事人気No8
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説