Flask Web开发入门之文件上传(八)


Posted in Python onAugust 17, 2018

本章我们介绍Flask Web开发中涉及的文件上传模块

定义后台接收处理逻辑

# 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

前台页面代码

<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>

上传按钮初始化及回调

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('上传失败!');
        }
      }
    });
})

当然允许上传,同时也应该允许对以删除文件进行删除

@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'})

删除按钮初始化及回调处理

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 + '"删除失败!');
          }
        }
      })
    })
  }

实现效果

Flask Web开发入门之文件上传(八)

源码参考:flask-sqlalchemy-web   

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 Python
python通过pil将图片转换成黑白效果的方法
Mar 16 Python
python实现按行切分文本文件的方法
Apr 18 Python
判断网页编码的方法python版
Aug 12 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
Jul 04 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
python实现与redis交互操作详解
Apr 21 Python
基于python实现音乐播放器代码实例
Jul 01 Python
OpenCV-Python实现油画效果的实例
Jun 08 Python
python操作excel的方法
Aug 16 #Python
python3调用百度翻译API实现实时翻译
Aug 16 #Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 #Python
Python pygorithm模块用法示例【常见算法测试】
Aug 16 #Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
Aug 16 #Python
Python使用pickle模块储存对象操作示例
Aug 15 #Python
Linux下多个Python版本安装教程
Aug 15 #Python
You might like
PHP header()函数常用方法总结
2014/04/11 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Python 递归函数详解及实例
2016/12/27 Python
python中正则表达式的使用方法
2018/02/25 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
浅谈Django的缓存机制
2018/08/23 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
中医药大学毕业生自荐信
2013/11/08 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
校园文化建设方案
2014/02/03 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
2014年公司工作总结
2014/11/22 职场文书
会议主持词开场白
2015/05/28 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
python实现会员信息管理系统(List)
2022/03/18 Python
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技