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_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では、こんなに短いコードで複数のファイルをアップロードするウェブページが簡単に作ることができます。これを応用すると色々なサイトに使えそうですね。
コメント