Flask Web開(kāi)發(fā)入門之文件上傳(八)
本章我們介紹Flask Web開(kāi)發(fā)中涉及的文件上傳模塊
定義后臺(tái)接收處理邏輯
# http://flask.pocoo.org/docs/0.12/patterns/fileuploads/ @app.route('/upload', methods=['POST']) def upload_file(): if request.method == 'POST': # check if the post request has the file part if 'file' not in request.files: logger.debug('No file part') return jsonify({'code': -1, 'filename': '', 'msg': 'No file part'}) file = request.files['file'] # if user does not select file, browser also submit a empty part without filename if file.filename == '': logger.debug('No selected file') return jsonify({'code': -1, 'filename': '', 'msg': 'No selected file'}) else: try: if file and allowed_file(file.filename): origin_file_name = file.filename logger.debug('filename is %s' % origin_file_name) # filename = secure_filename(file.filename) filename = origin_file_name if os.path.exists(UPLOAD_PATH): logger.debug('%s path exist' % UPLOAD_PATH) pass else: logger.debug('%s path not exist, do make dir' % UPLOAD_PATH) os.makedirs(UPLOAD_PATH) file.save(os.path.join(UPLOAD_PATH, filename)) logger.debug('%s save successfully' % filename) return jsonify({'code': 0, 'filename': origin_file_name, 'msg': ''}) else: logger.debug('%s not allowed' % file.filename) return jsonify({'code': -1, 'filename': '', 'msg': 'File not allowed'}) except Exception as e: logger.debug('upload file exception: %s' % e) return jsonify({'code': -1, 'filename': '', 'msg': 'Error occurred'}) else: return jsonify({'code': -1, 'filename': '', 'msg': 'Method not allowed'})
判定文件類型
def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
前臺(tái)頁(yè)面代碼
<div class="layui-inline"> <label class="layui-form-label">上傳文件</label> <div class="layui-input-inline"> <input type="text" name="attach" id="upload_message" lay-verify="required" autocomplete="off" class="layui-input" readonly="readonly"> </div> </div> <div class="layui-inline"> <img id='img_delete' src="{{ url_for('static', filename='images/delete.png')}}" onclick="do_delete()" style="display: none;"> <button type="button" class="layui-btn" id="upload"><i class="layui-icon"></i>上傳文件</button> </div>
上傳按鈕初始化及回調(diào)
layui.use(['upload', 'layer'], function () { var upload = layui.upload; var layer = layui.layer; upload.render({ elem: '#upload' , url: '/upload' , accept: 'file' , exts: 'txt' , size: 2048 , done: function (res) { console.log(res); if (res.code === 0) { layer.msg(res.filename + '上傳成功'); $("#upload_message").val(res.filename); $("#img_delete").show() } else { layer.alert('上傳失敗'); $("#upload_message").val('上傳失??!'); } } }); })
當(dāng)然允許上傳,同時(shí)也應(yīng)該允許對(duì)以刪除文件進(jìn)行刪除
@app.route('/delete', methods=['GET']) def delete_file(): if request.method == 'GET': filename = request.args.get('filename') timestamp = request.args.get('timestamp') logger.debug('delete file : %s, timestamp is %s' % (filename, timestamp)) try: fullfile = os.path.join(UPLOAD_PATH, filename) if os.path.exists(fullfile): os.remove(fullfile) logger.debug("%s removed successfully" % fullfile) return jsonify({'code': 0, 'msg': ''}) else: return jsonify({'code': -1, 'msg': 'File not exist'}) except Exception as e: logger.debug("delete file error %s" % e) return jsonify({'code': -1, 'msg': 'File deleted error'}) else: return jsonify({'code': -1, 'msg': 'Method not allowed'})
刪除按鈕初始化及回調(diào)處理
function do_delete() { var filename = $("#upload_message").val(); layui.use(['upload', 'layer'], function () { var layer = layui.layer; $.ajax({ url: '/delete?filename=' + filename + "×tamp=" + new Date().getTime() , type: 'GET' , success: function (response) { console.log(response) if (response.code == 0) { layer.msg('"' + filename + '"刪除成功!'); $("#upload_message").val('') $("img_delete").hide() } else { layer.msg('"' + filename + '"刪除失??!'); } } }) }) }
實(shí)現(xiàn)效果
源碼參考:flask-sqlalchemy-web
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python Web框架Flask下網(wǎng)站開(kāi)發(fā)入門實(shí)例
- 一個(gè)基于flask的web應(yīng)用誕生 用戶注冊(cè)功能開(kāi)發(fā)(5)
- Flask web開(kāi)發(fā)處理POST請(qǐng)求實(shí)現(xiàn)(登錄案例)
- Flask框架web開(kāi)發(fā)之零基礎(chǔ)入門
- Python使用Web框架Flask開(kāi)發(fā)項(xiàng)目
- Python Flask框架開(kāi)發(fā)之運(yùn)用SocketIO實(shí)現(xiàn)WebSSH方法詳解
- 一步步講解利用Flask開(kāi)發(fā)一個(gè)Web程序
相關(guān)文章
Python導(dǎo)入父文件夾中模塊并讀取當(dāng)前文件夾內(nèi)的資源
這篇文章主要給大家介紹了關(guān)于Python導(dǎo)入父文件夾中模塊并讀取當(dāng)前文件夾內(nèi)資源的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11python基礎(chǔ)教程之分支、循環(huán)簡(jiǎn)單用法
這篇文章主要介紹了python基礎(chǔ)教程之分支、循環(huán)簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了Python分支及循環(huán)語(yǔ)句的簡(jiǎn)單使用方法,需要的朋友可以參考下2016-06-06Python 正則表達(dá)式 re.match/re.search/re.sub的使用解析
今天小編就為大家分享一篇Python 正則表達(dá)式 re.match/re.search/re.sub的使用解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-073分鐘學(xué)會(huì)一個(gè)Python小技巧
Python時(shí)間日期轉(zhuǎn)換在開(kāi)發(fā)中是非常高頻的一個(gè)操作,你經(jīng)常會(huì)遇到需要將字符串轉(zhuǎn)換成 datetime 或者是反過(guò)來(lái)將 datetime 轉(zhuǎn)換成字符串,今天小編給大家?guī)?lái)了一個(gè)Python小技巧,感興趣的朋友一起看看吧2018-11-11matlab中二維插值函數(shù)interp2的使用詳解
這篇文章主要介紹了matlab中二維插值函數(shù)interp2的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04python數(shù)據(jù)清洗中的時(shí)間格式化實(shí)現(xiàn)
本文主要介紹了python數(shù)據(jù)清洗中的時(shí)間格式化實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05python 爬取馬蜂窩景點(diǎn)翻頁(yè)文字評(píng)論的實(shí)現(xiàn)
這篇文章主要介紹了python 爬取馬蜂窩景點(diǎn)翻頁(yè)文字評(píng)論的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01python OpenCV的imread不能讀取中文路徑問(wèn)題及解決
這篇文章主要介紹了python OpenCV的imread不能讀取中文路徑問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07python的即時(shí)標(biāo)記項(xiàng)目練習(xí)筆記
這篇文章主要介紹了python的即時(shí)標(biāo)記項(xiàng)目練習(xí)筆記,本文是閱讀《python基礎(chǔ)教程》一書(shū)的動(dòng)手實(shí)踐項(xiàng)目,需要的朋友可以參考下2014-09-09