近日在學習python,接觸到了flask框架,恰好客戶有個需求,須要在網頁上傳一個python 代碼的zip包,而後使用docker 容器運行這個zip裏面的程序,輸出結果。
對於初學文檔沒什麼好說的,http://flask.pocoo.org/docs/0.12/ 從這裏學習就好。html
針對我目前的需求,這裏貼上代碼,比較臃腫,初學所寫,見諒。詳細請看 gayhub地址:https://github.com/magic-chenyang/flask-uploadpython
from werkzeug.utils import secure_filename from flask import Flask,render_template,jsonify,request,send_from_directory import time import os import base64 app = Flask(__name__) UPLOAD_FOLDER='upload' app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER basedir = os.path.abspath(os.path.dirname(__file__)) ALLOWED_EXTENSIONS = set(['txt','png','jpg','xls','JPG','PNG','xlsx','gif','GIF']) # 用於判斷文件後綴 def allowed_file(filename): return '.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS # 用於測試上傳,稍後用到 @app.route('/',methods=['GET'],strict_slashes=False) def indexpage(): return render_template('index.html') # 上傳文件 @app.route('/',methods=['POST'],strict_slashes=False) def api_upload(): file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER']) if not os.path.exists(file_dir): os.makedirs(file_dir) f = request.files['file'] # 從表單的file字段獲取文件,file爲該表單的name值 if f and allowed_file(f.filename): # 判斷是不是容許上傳的文件類型 fname = secure_filename(f.filename) ext = fname.rsplit('.',1)[1] # 獲取文件後綴 unix_time = int(time.time()) new_filename = str(unix_time)+'.'+ext # 修改了上傳的文件名 f.save(os.path.join(file_dir, new_filename)) #保存文件到upload目錄 if ext == 'zip': z = zipfile.ZipFile(file_dir+'/'+new_filename,'r') for zz in z.namelist(): z.extract(zz,'/var/lib/docker/volumes/python_test/_data') return render_template('result.html',var1=fname) else: return jsonify({"errno": 1001, "errmsg": u"failed"}) if __name__ == '__main__': app.run(debug=True, port=6666,host='0.0.0.0') #默認127.0.0.1:5000,這裏修改了地址和端口方便本身使用