English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Flask ファイルアップロード

Flaskでファイルアップロードを処理するのは非常に簡単です。enctype属性が'multipart'に設定されている必要があります。/form-data'のHTMLフォームに文を提出し、指定されたURLに送信します。URLハンドラはrequest.files[]オブジェクトからファイルを抽出し、必要な場所に保存します。

アップロードされたファイルはまずサーバーの一時的な場所に保存され、その後最終的な場所に保存されます。ターゲットファイルの名前はハードコードされたものまたはrequest.files[file]オブジェクトのfilename属性から取得できますが、secure_filename()関数を使用して安全なバージョンを取得することをお勧めします。

Flaskオブジェクトの設定設定でデフォルトのアップロードフォルダのパスとアップロードファイルの最大サイズを定義できます。

変数説明
app.config[‘UPLOAD_FOLDER’]アップロードフォルダのパスを定義します
app.config[‘MAX_CONTENT_PATH’]アップロードするファイルの最大サイズを指定します - バイト単位で

以下のコードはURLを持っています: /uploadルール、このルールはtemplatesフォルダ内のupload.htmlファイルを表示し、uploader()関数を呼び出してアップロードプロセスを処理するURL => /upload-fileルール。

upload.htmlにはファイル選択ボタンと提出ボタンがあります。

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Flaskサンプル</title>
 </head>
    <body>
      <form action = "http://localhost:5000/upload" method = "POST" 
          enctype = "multipart/form-data">
          <input type = "file" name = "file" />
          <input type = "submit" value="提出"/>
       </form>
    </body>
 </html>

以下のスクリーンショットのように表示されます -

ファイルを選択した後、クリックしてください 提出。 フォームのPOSTメソッドがURLを呼び出します=> /upload_file。 下層関数uploader()がファイル保存操作を実行します。

以下はFlaskアプリケーションのPythonコードです。

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from flask import Flask, render_template, request
 from werkzeug import secure_filename
 app = Flask(__name__)
 @app.route('/upload, methods=['GET', 'POST'])
 def upload_file():
     if request.method == 'POST':
         f = request.files['file']
         print(request.files)
         f.save(secure_filename(f.filename))
         return 'file uploaded successfully'
     else:
         return render_template('upload.html')
 if __name__ == '__main__':
     app.run(debug=True)

プログラムを実行後、上記のコードを実行し、画像ファイルを選択してアップロードをクリックすると、以下の結果が得られます -