標籤:cto main txt style html abs not bsp 實現
#!-*-coding=utf-8-*-# from flask import Flask## app = Flask(__name__)### @app.route(‘/‘)# def hello_world():# return ‘Hello World!‘### if __name__ == ‘__main__‘:# app.run()from werkzeug.utils import secure_filenamefrom flask import Flask,render_template,jsonify,request,send_from_directoryimport timeimport osimport base64app = Flask(__name__)UPLOAD_FOLDER=‘upload‘app.config[‘UPLOAD_FOLDER‘] = UPLOAD_FOLDERbasedir = 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(‘/test/from‘)def upload_test(): return render_template(‘from.html‘)# 上傳檔案@app.route(‘/api/upload‘,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[‘myfile‘] # 從表單的file欄位擷取檔案,myfile為該表單的name值 if f and allowed_file(f.filename): # 判斷是否是允許上傳的檔案類型 fname = secure_filename(f.filename) print fname ext = fname.rsplit(‘.‘,1)[1] # 擷取檔案尾碼 unix_time = int(time.time()) # new_filename = str(unix_time)+‘.‘+ext # 修改了上傳的檔案名稱 new_filename = ‘12‘+‘.‘+ext # 修改了上傳的檔案名稱 f.save(os.path.join(file_dir,new_filename)) #儲存檔案到upload目錄 token = base64.b64encode(new_filename) print token return jsonify({"errno":0, "errmsg":"上傳成功","token":token}) else: return jsonify({"errno":1001, "errmsg":"上傳失敗"})@app.route(‘/api/load‘,methods=[‘GET‘])def load(): if request.method == "GET": if os.path.isfile(os.path.join(‘upload‘, ‘12.jpg‘)): return send_from_directory(‘upload‘, ‘12.jpg‘, as_attachment=True) # abort(404)if __name__ == ‘__main__‘: app.run(debug=True, port=9999)
官網:http://docs.jinkan.org/docs/flask/patterns/fileuploads.html
FLASK實現上傳下載功能