Flask Web開發入門(十)之圖片上傳(使用Flask-Upload)
在Flask Web開發入門(八)之檔案上傳中,我們探討了Flask框架下的檔案上傳,本章我們將使用Flask外掛Flask-Uploads示例說明的圖片上傳與展現如何實現
開始之前,我們先簡單看下Flask-Uploads原始碼實現:
類UploadSet:
檔案上傳配置集合,包含三個引數:
- name:檔案上傳配置集合的名稱,預設files,一般不用修改,只是一個標識,要求數字、字母或兩者組合,滿足isalnum
- extensions:上傳檔案型別,預設DEFAULTS = TEXT + DOCUMENTS + IMAGES + DATA,包含文字、文件、圖片、CSV、INI、YML等配置檔案
- default_dest:上傳檔案的預設儲存路徑,我們可以通過app.config[‘UPLOADS_DEFAULT_DEST’]來指定
方法configure_uploads
應用配置好之後,呼叫此方法,掃描上傳配置選項並儲存到我們的應用中,註冊上傳模組。
方法resolve_conflict
解決名字重複問題,如果伺服器上已經存在指定檔名的檔案,那麼Flask-Uploads通過此方法解決檔案儲存時的衝突問題,解決策略:檔名後加_num,num從1開始,之後拿新的名字重新判斷是否存在,如果仍舊存在,再次加1,直至不存在為止
方法實現:
name, ext = os.path.splitext(basename)
count = 0
while True:
count = count + 1
newname = '%s_%d%s' % (name, count, ext)
if not os.path.exists(os.path.join(target_folder, newname)):
return newname
方法呼叫:
if os.path.exists(os.path.join(target_folder, basename)):
basename = self.resolve_conflict(target_folder, basename)
示例
簡單分析完Flask-Uploads原始碼實現之後,我們來看下如何通過Flask-Uploads實現圖片上傳與展現
- 定義基本配置與應用註冊
app.config['UPLOADS_DEFAULT_DEST'] = UPLOAD_PATH
app.config['UPLOADS_DEFAULT_URL'] = 'http://127.0.0.1:9000/'
uploaded_photos = UploadSet()
configure_uploads(app, uploaded_photos)
- 上傳處理邏輯
# http://flask-uploads.readthedocs.io/en/latest/
@app.route('/flask-upload', methods=['POST'])
def flask_upload():
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:
filename = uploaded_photos.save(file)
logger.debug('%s url is %s' % (filename, uploaded_photos.url(filename)))
return jsonify({'code': 0, 'filename': filename, 'msg': uploaded_photos.url(filename)})
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'})
注意:核心方法即:uploaded_photos.save(file)
- 前臺程式碼
var photoUpload = upload.render({
elem: '#btn_photo'
, url: '/flask-upload'
, exts: 'jpg|png|jpeg'
, size: 5120
, before: function (obj) {
obj.preview(function (index, file, result) {
$('#photo').attr('src', result);
$('#photo').css('width', '300');
$('#photo').css('height', '300');
});
}
, done: function (res) {
if (res.code == 0) {
layer.msg(res.filename + '上傳成功!');
var href = '<a href="' + res.msg + '" style="color:blue; text-decoration: solid;">' + res.msg + '</a>'
$('#txt_photo').html(href)
} else {
return layer.msg('上傳失敗');
}
}
, error: function () {
var photo = $('#txt_photo');
photo.html('<span style="color: #FF5722;">上傳失敗</span> <a class="layui-btn layui-btn-mini demo-reload">重試</a>');
photo.find('#btn_photo').on('click', function () {
photoUpload.upload();
});
}
});
- 實現效果
注意紅色框內的檔名,我連續上傳了三次,那麼第三次檔名後面家了_2
相關文章
- Flask Web開發入門(十一)之圖片展現FlaskWeb
- flask部落格專案之tinymce圖片上傳Flask
- [python][flask] Flask 圖片上傳與下載例子(支援漂亮的拖拽上傳)PythonFlask
- 微信小程式開發之從相簿獲取圖片 使用相機拍照 本地圖片上傳微信小程式地圖
- 實戰:圖片上傳元件開發元件
- 用Flask寫一個上傳圖片的APIFlaskAPI
- php圖片上傳之圖片轉換PHP
- Web 前端開發之小白入門Web前端
- web前端圖片上傳(3)–filereaderWeb前端
- Flask Web開發學習之“HelloWorld”FlaskWeb
- Laravel 使用 FastDFS 上傳圖片LaravelAST
- 小程式開發:上傳圖片到騰訊雲
- .Net之Layui多圖片上傳UI
- laravel之標準上傳圖片Laravel
- flask入門4-檔案上傳與郵件傳送Flask
- Web開發初探之JavaScript 快速入門WebJavaScript
- 上傳圖片
- Uniapp開發微信小程式+Node ---- 圖片上傳APP微信小程式
- Flask框架從入門到精通之異常處理(十)Flask框架
- Laravel——圖片上傳之七牛雲Laravel
- H5上傳圖片之canvasH5Canvas
- php圖片上傳之檔案安全PHP
- Flask二之快速入門Flask
- Retrofit+RxJava上傳圖片上傳圖片到後臺RxJava
- 【easyui 】上傳圖片UI
- 上傳圖片jsJS
- 圖片上傳及圖片處理
- web技術分享| 圖片上傳與圖片裁剪結合 vue3WebVue
- Flutter 入門與實戰(二十六):一文搞定圖片選擇及圖片上傳Flutter
- 我需要在Web上完成一個圖片上傳的功能Web
- 笨辦法學前端之圖片上傳前端
- 短視訊平臺開發,圖片上傳和圖片預覽功能實現
- web圖片使用Web
- python web開發-flask中日誌的使用PythonWebFlask
- Flask Web 開發 使用者評論_2FlaskWeb
- 鴻蒙OS前端開發入門指南:網路圖片_Image渲染網路圖片鴻蒙前端
- Flask web開發(3):模板FlaskWeb
- #iOS AF上傳圖片引發的血案iOS