# -*- coding: utf-8 -*-
from flask import Flask, render_template, request,
make_response, jsonify, send_file
import os
import werkzeug
import tempfile
# flask
app = Flask(__name__)
# limit upload file size : 1MB
app.config['MAX_CONTENT_LENGTH'] = 1 * 1024 * 1024
# ex) export UPLOAD_DIR_PATH=/tmp/flaskUploadDir
UPLOAD_DIR = os.getenv("UPLOAD_DIR_PATH")
print("UPLOAD_DIR={}".format(UPLOAD_DIR))
if UPLOAD_DIR is None:
UPLOAD_DIR = os.getcwd()
print("UPLOAD_DIR={}".format(UPLOAD_DIR))
@app.route("/")
def route():
return '''
<html><body>
flask file
upload/download example<br>
<a
href="/upload">upload</a><br>
<a
href="/data/download">download</a><br>
</body></html>
'''
@app.route("/upload")
def upload():
import datetime
now = datetime.datetime.now()
timeString = now.strftime("%Y-%m-%d %H:%M")
templateData = {
'title' : 'HELLO!',
'name' : 'flask!',
'ampm' : 1,
'time': timeString
}
#./templates/sample.html
return render_template('upload.html',
**templateData)
# rest api : request.files with multipart/form-data
# <form action="/data/upload" method="post"
enctype="multipart/form-data">
# <input type="file" name="uploadFile"/>
# <input type="submit" value="submit"/>
# </form>
@app.route('/data/upload', methods=['POST'])
def upload_multipart():
if 'uploadFile' not in request.files:
make_response(jsonify({'result':'uploadFile is
required.'}))
file = request.files['uploadFile']
print("file={}".format(file))
fileName = file.filename
if '' == fileName:
make_response(jsonify({'result':'filename must not
empty.'}))
#saveFileName =
datetime.now().strftime("%Y%m%d_%H%M%S_") \
# +
werkzeug.utils.secure_filename(fileName)
saveFileName =
werkzeug.utils.secure_filename(fileName)
print("saveFileName={}".format(saveFileName))
if (len(saveFileName) == 0):
fd, tempPath =
tempfile.mkstemp()
print("tempPath={}".format(tempPath))
saveFileName =
os.path.basename(tempPath)
print("saveFileName={}".format(saveFileName))
os.close(fd)
print("UPLOAD_DIR={}".format(UPLOAD_DIR))
file.save(os.path.join(UPLOAD_DIR,
saveFileName))
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.'
@app.route('/data/download')
def download():
return
send_file(os.path.join(UPLOAD_DIR,'output.csv'),
mimetype='text/csv',
attachment_filename='output.csv',
as_attachment=True)
# main
if __name__ == "__main__":
print app.url_map
app.run(host='0.0.0.0',
port=8080,debug=True)
|