【Flask项目】文件分享系统(三)

Flask文件上传与HTML模板

上篇文章【Flask项目】文件分享系统(二)中介绍了如何读取目录内容和下载文件,这篇继续讲上传文件和HTML模板。

上传文件

上传文件即用户在浏览器上选择要上传的文件,然后调用上传接口把文件传到flask程序,在看代码前,要先了解一个知识点,那就是请求,什么是请求呢?

请求就是浏览器向flask程序发起访问,告诉flask程序,我想要认识你,flask程序说好呀,欢迎你来和我交流,但是你得和我用同样的语言交流,不然我听不懂。就这样,浏览器必须使用GET、POST、PUT、DELETE等方法和flask程序进行交流,而其中常用的方法就是GET和POST。这里GET和POST方法的区别不做过多讲解了,大家可以看我写的相关文章或去度娘一下,当然,要想快速检索可以考虑AI搜索。这里大家简单的理解为GET只能携带有限的明文参数访问flask程序,而POST可以以非明文的方式携带的内容更多。

当然请求中不光有请求方法,还包括URL、请求头等一些内容,想详细了解的,可以给我留言,我会整理出来一篇详细的文章讲解。简单了解了请求后,我们可以知道,上传文件可以使用POST的方法,携带的数据量大,确相对GET安全一些。

再回到flask程序中,我们如何让其支持POST?又如何从请求中拿到文件内容呢?这个后面来讲,先来看下上传文件的代码。

@app.route('/upload/', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST':
        file = request.files['file']
        if file:
            filename = secure_filename(file.filename)
            print(filename)
            if os.path.exists(rootdir + 'data' + os.sep + filename):
                filename = str(int(time.time())) + '_' + filename
            file.save(os.path.join(rootdir + 'data', filename))
            return('文件上传成功')
    else:
        return('报错啦!!!!')

从上面的代码可以看到,定义路由的地方@app.route('/upload/', methods=['GET', 'POST']),我们加了个参数methods,这个参数就是指定访问该路由可以使用的方法嘀。

我们还可能看到,上传的视图函数中,我们用到了request,英文好的同学应该能知道,这个词有请求的意思,没错这个就是获取浏览器发来的请求嘀。request可不是我们自己定义的变量,而是flask中自带的全局变量,使用from flask import request来导入这个函数。

后面的代码就是判断当前文件是否存在的,如果存在则给他文件名上加个时间,如果不存在则直接保存这个文件。这里为了保证文件名的合法性我使用了werkzeug中的secure_filename函数,使用from werkzeug.utils import secure_filename来导入,这个函数可以保证文件名中不会有特殊字符,造成保存文件失败。


html模板

到此我们只实现了后端的内容,还需要前端页面才能正常使用,因为我们对前端页面不做要求,所以我们只需要简单的把内容显示出来即可,以下是前端代码。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值