Flask python 开发篇:上传文件(在指定目录下创建文件夹)

news2024/12/22 9:45:27

flask上传文件以及常见问题

      • 一、flask文档上传文件的介绍
      • 二、上传文件的实现
        • 2.1、生成一个from表单,用来提交图片
        • 2.2、编写上传的逻辑
      • 三、运行代码、以及常见异常
      • 四、写在最后

一、flask文档上传文件的介绍

Flask上传文件的文档介绍,文件上传的基本思想实际上非常简单。它基本上是这样工作的:

  • 1、一个<form>标签用enctype = multipart / form-data标记,<input type = file>放在那个表格中。

  • 2、应用程序从请求对象上的:attr:~flask.request.files字典访问该文件。

  • 3、使用 save() 方法将文件永久保存在文件系统的某个位置。

切记1:在将文件直接存储到文件系统之前,一定要使用secure_filename()函数来保护文件名。
切记2:一定要限制上传文件的扩展
在这里插入图片描述

二、上传文件的实现

2.1、生成一个from表单,用来提交图片

在同级别下的templates目录下,新建一个upload.html文件,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>
   <form action="" method="post" enctype="multipart/form-data">
    <table>
            <tr>
                <td>头像:</td>
                <td><input type="file" name="file"></td>
            </tr>
           
            <tr>
                <td></td>
                <td><input type="submit" value="提交"></td>
            </tr>
    </table>
  </form>
 </body>
</html>
2.2、编写上传的逻辑

在upload.py文件中,编写上传的逻辑,代码如下:

from flask import Flask, render_template, request, send_from_directory
from werkzeug.utils import secure_filename
import os
import uuid

app = Flask(__name__)

# 设置文件上传保存路径
app.config['UPLOAD_FOLDER'] = 'static/uploads/'
# MAX_CONTENT_LENGTH设置上传文件的大小,单位字节
app.config['MAX_CONTENT_LENGTH'] = 1 * 1024 * 1024

@app.route('/', methods = ['GET'])
def hell():
    return  '翻倍阿'

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    # 如果是get请求响应上传视图,post请求响应上传文件
    if(request.method == 'GET'):
        return render_template('upload.html')
    else:

        if 'file' not in request.files:
            return 'No file part'

        file = request.files['file']

        if file.filename == '':
            return 'No selected file'

        fname = secure_filename(file.filename)
        ext = fname.rsplit('.')[-1]

        # # 生成一个uuid作为文件名
        fileName = str(uuid.uuid4()) + "." + ext
        # return fileName

        # # os.path.join拼接地址,上传地址,f.filename获取文件名
        static_upload_path = app.config['UPLOAD_FOLDER']

        if not os.path.exists(static_upload_path):
                os.makedirs(static_upload_path)

        file.save(os.path.join(app.config['UPLOAD_FOLDER'], fileName))
        return 'ok'

# 图片下载
@app.route('/download/<filename>', methods=['GET'])
def download(filename):
    if request.method == "GET":
        #通过文件名下载文件
        # return os.path.join(app.config['UPLOAD_FOLDER'], filename)
        path = os.path.isfile(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        # return {
        #     'is_file' :path
        # }
        if path:
            return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)

if __name__ == '__main__':
    app.run(debug=True)

要是想限制上传文件的类型,可以参考文档上的:
在这里插入图片描述

三、运行代码、以及常见异常

运行以后,是这样的:
在这里插入图片描述

若是选中文件提交以后,出现异常
在这里插入图片描述
这里需要确保保存文件的目录真实存在,且有权限,所以为了避免该问题,最好在代码中判断一下目录是否存在

        if not os.path.exists(static_upload_path):
                os.makedirs(static_upload_path)

下一篇:python中判断目录是否存在的方法

四、写在最后

宣传一波:大家若是有人想北京租房可以联系我,主要是物资学院、通州北关、北苑、草房的房子。(注:我不是中介哟,我也不打算转行做中介,是我靠谱的朋友在做)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1551681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快递鸟物流轨迹地图API接口,包裹行程尽在掌握!

在快节奏的现代生活中&#xff0c;物流行业作为连接生产者与消费者的桥梁&#xff0c;其重要性不言而喻。随着电子商务的飞速发展&#xff0c;人们对物流信息的实时性和准确性要求越来越高。为了满足这一需求&#xff0c;快递鸟物流轨迹地图API应运而生&#xff0c;为广大用户提…

WIFI驱动移植实验: wireless tools 工具测试

一. 简介 前面一篇文章交叉编译了 wireless tools 工具&#xff0c;并移植到开发板文件系统上。文章如下&#xff1a; WIFI驱动移植实验&#xff1a; wireless tools 工具移植-CSDN博客 本文对 所移植的操作 WIFI设备的工具 wireless tools进行测试。确认是否可以使用。 二…

【浅尝C++】使用模板实现泛型编程第一弹=>函数模板/类模板/模板匹配原则/函数模板原理

&#x1f3e0;专栏介绍&#xff1a;浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 &#x1f6a9;一些备注&#xff1a;之前的文章有点杂乱&#xff0c;这里将前面的知识点重新组织了&#xff0c;避免了过多冗余的废话。 &#x1f3af;每日努力一点点&#xff0c;技术变化看…

如何删除Excel中的空白行?这里提供详细步骤

要从数据集中删除所有空白行吗&#xff1f;如果是这样&#xff0c;Microsoft Excel提供自动和手动方法来清除空白行并向上移动数据。下面是如何使用这些方法。 删除空白行时&#xff0c;Excel会删除整行并上移数据&#xff0c;以便数据集中不再有空行。记住&#xff0c;你也可…

linux下使用迅雷的完美办法(网络版免费),其他下载工具

迅雷有自家服务器的支持&#xff0c;因此&#xff0c;其他下载器&#xff0c;可能难以匹敌 &#xff1f; linux下使用迅雷的完美办法&#xff08;免费&#xff09; https://blog.csdn.net/lqrensn/article/details/8853949 网络版 Linux下安装并使用迅雷 https://www.lxlin…

【微服务】Nacos(注册中心)

文章目录 1.基本介绍1.概述2.Nacos下载和运行&#xff08;java8/maven3.2.x&#xff09;1.解压到没有中文路径的2.双击startup3.浏览器输入http://192.168.242.124:8848/nacos4.用户名和密码为nacos5.cmd输入netstat -anb | more查看监听端口 2.创建Nacos服务提供者 100041.项目…

人工智能在产业中应用--生成智能

二、生成式人工智能 前面介绍了很多人工智能的应用&#xff0c;接下来部分我们会介绍当前正在进行的生成智能。生成智能和以往的人工智能有什么区别&#xff0c;个人觉得主要区别就在于“度”。在表现上就是以前的人工智能更多是利用既有的数据集分布挖掘和解决在这个数据集下…

WPF 命名空间解释

在C#中有命名空间的概念&#xff0c;我们可以使用using引入&#xff0c;就可以使用其中的类&#xff0c;在xaml中&#xff0c;也同样有命名空间&#xff0c;在window标签中用xmlns声明的这几行&#xff0c;这就是本页面引入的命名空间。 一般的情况下&#xff0c;我们引入命名空…

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议

计算机网络&#xff1a;传输控制协议&#xff08;Transmission Control Protocol-TCP协议&#xff09; 本文目的前置知识点TCP协议简介主要特性通信流程1. 建立连接的过程(三次握手&#xff0c;243)1.1 为什么要三次握手&#xff0c;两次不行吗&#xff1f; 2. 释放连接的过程(…

在Linux上使用nginx反向代理部署Docker网站

在政务云上部署Web环境&#xff0c;为了保证服务器安全&#xff0c;甲方只开放一个端口且只允许使用https协议进行访问&#xff0c;经过思考&#xff0c;决定使用docker部署网站&#xff0c;使用nginx反向代理&#xff0c;通过不同的二级域名访问不同的端口。 1 使用docker部署…

每日一题系列 —— 说一下JS的数据类型。/ JavaScript的数据类型有哪些?

面试官&#xff1a;说一下JS的数据类型。/ JavaScript的数据类型有哪些&#xff1f; 答&#xff1a;JavaScript的数据类型分为两种&#xff1a;①基本数据类型&#xff1b;②引用数据类型 其中基本数据类型包括&#xff1a; &#xff08;1&#xff09;数值&#xff08;Number…

ubuntu的常用操作

一、用户 1.1 创建新用户 1.1.1 添加、修改、删除 1.2 超级用户root 切换到root用户&#xff0c;有全部权限&#xff0c;可以直接使用任何命令。 我们在什么时候才会切换到root用户进行操作呢&#xff1f;当我们使用某些命令&#xff0c;不想前面一直加sudo的话&#xff0c;…

大型DMP系统

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;这是我作为学习笔记总结应用篇第一篇&#xff0c;本章大量的参考了别的博主的文章。 我们今天就先从搭建一个大型的 DMP 系统开始&#xff0c;利用组成原理里面学到的存储器知识&#xff0c;来做选型判断&#xff0c;从而更…

jenkins权限分配

1.安装权限插件 Role-Based Strategy 2.创建用户 3.修改全局安全配置中的授权策略为Role-Based Strategy 4.进入Manage and Assign Roles创建Global roles和Item roles 4.进入Assign Roles给用户分配role

行存储与列存储:大数据存储方案的选择与优缺点分析

随着大数据时代的来临&#xff0c;数据的规模和复杂性呈指数级增长&#xff0c;传统的关系数据库已经不再适应这一巨大的存储量和计算要求。在大数据存储领域&#xff0c;行存储和列存储成为两种备受关注的存储方案。本文将探讨行存储和列存储的定义、优缺点&#xff0c;并结合…

2024泰迪杯数据挖掘挑战赛A题思路代码成品文章参考:生产线的故障自动识别与人员配置

问题 1 根据附件 1 中的数据&#xff0c;分析生产线中各装置故障的数据特征&#xff0c;构建故障报警模型&#xff0c;实现故障的自动即时报警。 问题分析 针对问题一&#xff0c;我们的目标是利用附件1中提供的数据&#xff0c;分析生产线各装置发生故障的数据特征&#xff…

Python拆分PDF、Python合并PDF

WPS能拆分合并&#xff0c;但却是要输入编辑密码&#xff0c;我没有。故写了个脚本来做拆分&#xff0c;顺便附上合并的代码。 代码如下&#xff08;extract.py) #!/usr/bin/env python """PDF拆分脚本(需要Python3.10)Usage::$ python extract.py <pdf-fil…

ntp时间同步

上次使用minio的时候&#xff0c;报错了与本地的时间差过大&#xff0c;我当时还很疑惑&#xff0c;与是我去minio的linux上看了时间&#xff0c;发现因为是用的挂载虚拟机的原因&#xff0c;我图方便每次都是直接挂起虚拟机&#xff0c;导致时间一直卡在哪一个时间段。所以使用…

2024年【安全员-C证】考试及安全员-C证模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-C证考试考前必练&#xff01;安全生产模拟考试一点通每个月更新安全员-C证模拟考试题题目及答案&#xff01;多做几遍&#xff0c;其实通过安全员-C证模拟考试题很简单。 1、【多选题】《上海市工伤保险实施办…

Redis高级面试题-2024

说说你对Redis的理解 Redis是一个基于Key-Value存储结构的开源内存数据库&#xff0c;也是一种NoSQL数据库。 它支持多种数据类型&#xff0c;包括String、Map、Set、ZSet和List&#xff0c;以满足不同应用场景的需求。 Redis以内存存储和优化的数据结构为基础&#xff0c;提…