Flaskで画像とファイルを効率的にアップロードする方法

この記事では、PythonのWebフレームワークであるFlaskを用いて、画像とファイルを効率的にアップロードする方法について解説します。具体的なコード例、その詳細な解説、さらには応用例まで網羅しています。

目次

基本的なファイルアップロードの処理

Flaskでのファイルアップロードは非常に簡単です。基本的には`request`オブジェクトからファイルを取得し、サーバー側に保存します。

環境構築

まずはFlaskをインストールしましょう。

# Flaskのインストール
pip install Flask

基本的なアップロード処理のコード

以下は基本的なファイルアップロードのサンプルコードです。

from flask import Flask, request

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_file():
    uploaded_file = request.files['file']  # ファイルを取得
    uploaded_file.save("uploaded_file.txt")  # ファイルを保存
    return 'File uploaded successfully'

このコードは、POSTメソッドで`/upload`にアクセスした際に、`file`という名前のファイルを取得して`uploaded_file.txt`として保存します。

ファイルの種類に応じた処理

画像とテキストファイルの区別

ファイルの種類に応じて処理を分岐することも可能です。以下はその例です。

from flask import Flask, request
import os

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_file():
    uploaded_file = request.files['file']
    if uploaded_file.content_type.startswith('image/'):
        uploaded_file.save("uploaded_image.jpg")
    else:
        uploaded_file.save("uploaded_file.txt")
    return 'File uploaded successfully'

このコードは、アップロードされたファイルが画像であれば`uploaded_image.jpg`、それ以外であれば`uploaded_file.txt`として保存します。

応用例

複数ファイルのアップロード

複数のファイルを一度にアップロードする場合も考慮しておくと良いでしょう。

from flask import Flask, request

app = Flask(__name__)

@app.route('/multi_upload', methods=['POST'])
def multi_upload():
    uploaded_files = request.files.getlist("files[]")
    for i, uploaded_file in enumerate(uploaded_files):
        uploaded_file.save(f"uploaded_file_{i}.txt")
    return 'Files uploaded successfully'

ファイルサイズの制限

ファイルサイズが大きすぎる場合にはエラーハンドリングをしておくことも重要です。

from flask import Flask, request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 1 * 1024 * 1024  # 1MB以下
@app.route('/upload', methods=['POST'])
def upload_file():
    uploaded_file = request.files['file']
    if uploaded_file.content_length < app.config['MAX_CONTENT_LENGTH']:
        uploaded_file.save("uploaded_file.txt")
    else:
        return 'File too large'
    return 'File uploaded successfully'

まとめ

Flaskでのファイルアップロードは簡単で多機能ですが、実際の運用においては、ファイルの種類やサイズによる制限、複数ファイルのアップロードなど、多くのケースを考慮する必要があります。この記事で紹介した方法を参考に、より高度なファイルアップロード処理を実装してみてください。

コメント

コメントする

目次