【python】flaskで複数のファイルをアップロードする方法

Python

flaskで複数のファイルをアップロードする方法をご紹介します。

今回は、特に制限を設けていないので、どんなファイルでも複数アップロードし、特定のフォルダに格納するというところまで行いたいと思います。

flaskで複数のファイルをアップロードするソースコード

SampleCode

下記のコードをapp.pyに入力することで簡単なファイルアップロードのフォームと複数ファイルアップロードする機能を実装できる。

import os
from flask import Flask,render_template,request
from werkzeug.utils import secure_filename

app = Flask(__name__)
UPLOAD_FOLDER = 'upload_folder/'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

@app.route('/')
def root_page():
    return 'it''s root'

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


@app.route('/upload_file',methods=['POST'])
def upload_file():
    if request.method == 'POST':
        files = request.files.getlist('file')
        for file in files:
            file.save(os.path.join(app.config['UPLOAD_FOLDER'],secure_filename(file.filename)))
        return 'file uploaded successfully'


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


HTML側は下記のようになっています。<body>内に<form>を入れているだけの画面になります。

<html>
<body>
<form action = "/upload_file" method = "POST" enctype = "multipart/form-data">
    <input type = "file" name = "file" multiple=""/>
    <input type = "submit"/>
</form>
</body>
</html>

表示ページ

UploadPage

upload画面
ファイル選択後
送信ボタン押下後

データ保存フォルダ

アップロードされたファイルは、下記のupload_folderに格納されます。

upload_folder

解説

下記では、ライブラリのimportを行い、アップロード先のフォルダを指定してます。

import os
from flask import Flask,render_template,request
from werkzeug.utils import secure_filename

app = Flask(__name__)
UPLOAD_FOLDER = 'upload_folder/'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER


下記では、/uploadにアクセスすると、upload.htmlを返すルートと、upload.htmlで送信ボタンを押下することで遷移する/upload_fileを記載しています。upload_file()では、POSTメソッドを受け取った時に、受け取ったファイルリストをループで処理してupload_folderに保存するようにしています。

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


@app.route('/upload_file',methods=['POST'])
def upload_file():
    if request.method == 'POST':
        files = request.files.getlist('file')
        for file in files:
            file.save(os.path.join(app.config['UPLOAD_FOLDER'],secure_filename(file.filename)))
        return 'file uploaded successfully'

いかがだったでしょうか。flaskでは、こんなに短いコードで複数のファイルをアップロードするウェブページが簡単に作ることができます。これを応用すると色々なサイトに使えそうですね。

コメント

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