Flask
Python3
upload

Flask で複数のファイルをアップロードする

Flask で複数おファイルをアップロードする方法です。

次の2つのファイルが必要です。

multi_upload.py
static/upload.html

multi_upload.py
# -*- coding: utf-8 -*-
#
#   multi_upload.py
#
#                   Apr/15/2018
#
# ------------------------------------------------------------------
from flask import Flask, request, make_response, jsonify
import os
import sys
import werkzeug
from datetime import datetime

# flask
app = Flask(__name__)

# limit upload file size : 1MB
app.config['MAX_CONTENT_LENGTH'] = 1 * 1024 * 1024
#
#
UPLOAD_DIR="/tmp"

# ------------------------------------------------------------------
@app.route('/data/upload', methods=['POST'])
def upload_multipart():
    sys.stderr.write("*** upload_multipart *** start ***\n")
    if 'uploadFile' not in request.files:
        make_response(jsonify({'result':'uploadFile is required.'}))
#
    upload_files = request.files.getlist('uploadFile_aa')
    sys.stderr.write("len(upload_files) = %d\n" % len(upload_files))
    for file in upload_files:
         fileName = file.filename
         sys.stderr.write("fileName = " + fileName + "\n")
         saveFileName = datetime.now().strftime("%Y%m%d_%H%M%S_") \
           + werkzeug.utils.secure_filename(fileName)
         file.save(os.path.join(UPLOAD_DIR, saveFileName))
#
    sys.stderr.write("*** upload_multipart *** end ***\n")
#
    return make_response(jsonify({'result':'upload OK.'}))

# ------------------------------------------------------------------
@app.errorhandler(werkzeug.exceptions.RequestEntityTooLarge)
def handle_over_max_file_size(error):
    print("werkzeug.exceptions.RequestEntityTooLarge")
    return 'result : file size is overed.'

# ------------------------------------------------------------------
# main
if __name__ == "__main__":
    print(app.url_map)
    app.run(host='localhost', port=3000)
#
# ------------------------------------------------------------------
static/upload.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<form action="/data/upload" method="post" enctype="multipart/form-data"> 
  <input type="file" name="uploadFile_aa"/ multiple="multiple">
  <input type="submit" value="submit"/>
</form>
</body>
</html>

サーバーの起動

python multi_upload.py

ブラウザーで次にアクセス

http://localhost:3000/static/upload.html
flask_apr1501.png

ファイルを選択して、Submit をクリックすれば、/tmp にファイルがアップロードされます。