Flask Web开发入门北京快乐8出售之文件上传

本章北京快乐8出售 dsluntan.com 我们介绍Flask Web开发中涉及的文件上传模块

定义后台接收处理逻辑
@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 + "&timestamp=" + 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 + ‘"删除失败!‘);
}
}
})
})
}

原文地址:http://blog.51cto.com/13932480/2162356

时间: 2024-11-03 22:04:49

Flask Web开发入门北京快乐8出售之文件上传的相关文章

分享知识-快乐自己:Struts2文件上传及文件下载

1)Struts2单文件上传 action:类文件 package com.mlq.action; import com.opensymphony.xwork2.ActionSupport; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import java.io.File; import java.io.IOException; /** * Struts2:单文件

前端开发之旅- 移动端HTML5实现文件上传

一. 在一个客户的webapp项目中需要用到 html5调用手机摄像头,找了很多资料,大都是 js调用api  然后怎样怎样,做了几个demo测试发现根本不行, 后来恍然大悟,用html5自带的 input file=""  ,纯html5,并且不涉及到js ,就可以实现.代码如下: <input type="file" accept="image/*" capture="camera"> <input ty

[SAP ABAP开发技术总结]客户端文本文件、Excel文件上传下载

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 客户端文本文件或Excel文件导入与导出... 1 TEXT_CONVERT_XLS_TO_SAP. 1 ALSM_EXCEL_TO_INTERNAL_TABLE. 3 SAP_CONVERT_TO_XLS_FORMAT. 5 客户端文本文件或Excel文件导入与导出 TEXT_CONVERT_XLS_TO_SAP TEXT_CONVERT_XLS_TO_SAP函数可以将

小白日记38:kali渗透测试之Web渗透-手动漏洞挖掘(三)-文件上传漏洞

手动漏洞挖掘 文件上传漏洞[经典漏洞,本身为一个功能,根源:对上传文件的过滤机制不严谨] <?php echo shell_exec($_GET['cmd']);?> 直接上传webshell 修改文件类型上传webshell 文件头,扩展名 修改扩展名上传webshell 静态解析文件扩展名时可能无法执行 文件头让偶过滤上传webshell 上传目录权限 正常上传 当可以上传一个页面文件或一句话木马等时,则可验证存在该漏洞 #低安全级别 绕过:可截包重放,修改上传文件大小等限制 #中等级别

flask web开发笔记 -- 快速入门

flask web开发笔记 -- 快速入门 初始化 Flask应用需要创建应用实例. Web服务器通过Web Server Gateway Interface (WSGI)协议把从客户端接收到的请求传递给该对象.应用程序实例是Flask类对象,通常创建如下: from flask import Flask app = Flask(__name__) Flask类的构造函数唯一的参数是应用的主模块名或包名,用于确定应用的根目录.对于大多数应用程序,使用Python的__name__变量即可. 路由

Web开发入门教程:Pycharm轻松创建Flask项目

Web开发入门教程:Pycharm轻松创建Flask项目 打开Pycharm的file,选择创建新的项目,然后弹出对话框,我们可以看到里面有很多的案例,Flask.Django等等,我们选择生成Flask的demo程序 选择创建之后一个简易的Flask项目就出现在我们眼前,第一个是入口程序,还有一个static的静态目录,templates是模板存放的位置 我们可以手动来启动这个Flask项目,但是这不是很理智的,在Pycharm上面有个run,我们可以选择run来启动Flask的服务,默认打开

flask web开发笔记 -- 简介

Flask是使用Python编写的轻量级Web应用框架.它基于Werkzeug WSGI工具包和Jinja2 模板引擎. Flask使用BSD授权. Flask基于Python的灵活,为Web开发提供简单的模板.demo:Flask community Flask也被称为微框架,因为它核心简单但扩展性好.Flask没有数据库层.表单验证等第三方已经存在的通用功能.Flask的扩展可以像flask自己实现一样使用这些功能.扩展有ORM(object-relational mappers,对象关系映

Flask之旅《Flask Web开发:基于Python的Web应用开发实战》学习笔记

<Flask Web开发:基于Python的Web应用开发实战> 点击上方的"目录"快速到达哦! 虽然简单的网站(Flask+Python+SAE)已经上线,但只是入门.开发大型网站,系统地学习一遍还是有必要的. 1 虚拟环境 2016-6-8 书上介绍了 virtualenv,每个venv都会拷贝一份packages到项目 /venv目录. virtualenv venv venv\Scripts\activate.bat (venv) $ pip freeze >

《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)

目录 前言 第8章 用户认证 第9章 用户角色 第10章 用户资料 第11章 博客文章 第12章 关注者 第13章 用户评论 第14章 应用编程接口   前言 第1章-第7章学习实践记录请参见:<Flask Web开发——基于Python的Web应用开发实践>一字一句上机实践(上) 本文记录自己学习<Flask Web开发——基于Python的Web应用开发实践>的第8章-第14章内容.相比于刚开始学习第1-7章内容来说,本部分内容实战性更强,而且在书本上遇到的问题也相对较少,如果