LoginSignup
7
17

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-04-15

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 にファイルがアップロードされます。

7
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
17