Flaskでファイルアップロード機能を実装する方法を分かりやすく解説する

スポンサーリンク

このチュートリアルにようこそ! ここでは、Flask で HTML フォームを使ってファイルをアップロードする方法を学びます。

さて、コーダー諸君、始めましょう。

スポンサーリンク

How to Upload Files using Python Flask?

Flaskでファイルをアップロードするのは簡単な作業です。

フロースキーマは以下の通りです。

  1. ファイルアップロードのインターフェイスを表示するための HTML フォーム
  2. アップロードされたファイルをFlask Viewで保存する

といったところです。


ここで必要なのはこれだけです。

1. ファイルアップロードのためのHTMLフォーム

ファイルアップロードを扱うには、HTML テンプレートの form 属性に enctype = “multipart/form-data” を追加する必要があります。

HTMLフォームのサンプルは以下のようなものです。

<html>
   <body>
      <form action = "http://localhost:5000/endpoint" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "file" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

2. ファイルの保存

Flask では、アップロードされたファイルはまずサーバー上の一時的な場所に保存され、その後保存先に恒久的に保存されます。

保存先の場所とファイルの最大サイズは、Flask の設定にて指定することができます

構文 説明
app.config[‘UPLOAD_FOLDER’] 保存先フォルダを指定する
app.config[‘MAX_CONTENT-PATH’] ファイルの最大sixeをバイト数で指定する|

保存先のファイル名は、直接ハードコーディングするか、filename関数を使用して保存することができます

f = request.files['file']
f.save(f.filename)

アップロードされたファイルは、secure_filename関数を使用して安全なバージョンを使用することが常に推奨されます。

f = request.files['file']
f.save(secure_filename(f.filename))

Flask のファイルアップロードフォームをコーディングする

理論を理解したところで、本題に入り、Flask を使ってファイルをアップロードするタスクを実行するために必要なコードの手順を正確に理解しましょう。

1. フォームのテンプレート

簡単なHTMLフォーム「form.html」ファイルを、以下のコードで作成します。

<html>
   <body>
      <form action = "http://localhost:5000/upload" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "File" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

このシンプルなフォームは、ユーザが送信したファイルを取り込むだけです。

Flask Forms の詳細については、Flask Forms の記事を参照してください。

2. Flask の View 関数をコーディングする

では、Flask アプリケーションに以下のコードを追加してください。

from flask import Flask,render_template,request
from werkzeug import secure_filename
 
@app.route('/form')
def form():
    return render_template('form.html')
 
@app.route('/upload', methods = ['POST', 'GET'])
def upload():
    if request.method == 'POST':
        f = request.files['file']
        f.save(secure_filename(f.filename))
        return "File saved successfully"
 
app.run(host='localhost', port=5000)

ここで

  1. Form View は Form を表示します。
  2. フォームが送信されると、フォームデータ(アップロードファイル)がPOSTメソッドでUpload Viewに(リクエストオブジェクトの一部として)送信されます。
    1. Upload View は f.save() 属性で永久保存する前に、ファイルを変数 f に一時的に保存します。

Flask のフォームについてもっと知りたい方は、 Flask Forms の記事をご覧ください。

3. コードの実装

サーバーを起動して、確認してみましょう。

Upload Form
Upload Form

ファイルを選択し、送信をクリックします。

Upload
Upload

これでファイルの保存は成功です。

これで、フォルダ内の Flask アプリケーションの横に、アップロードされたファイルが表示されるようになります。

Destination
Destination

これで完了です。

ファイルのアップロードが完了しました。

まとめ

このチュートリアルは以上です。

このチュートリアルを理解するために、上記の例を試してみてください。

では、また次の記事でお会いしましょう。

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