flask 上传文件

python 复制代码
from flask import Flask, request, render_template,redirect, url_for
from werkzeug.utils import secure_filename
import os
from flask import send_from_directory # send_from_directory可以从目录加载文件


app = Flask(__name__)

#UPLOAD_FOLDER = 'media'  # 注意:要提前在根目录下新建media文件,否则会报错
'''
报错路径找不到:
要解决此问题,可以将反斜杠替换为正斜杠,或者使用原始字符串字面值指定文件路径.
通过在字符串前添加r,它就变成了一个原始字符串文字,并且反斜杠将被解释为文字反斜杠而不是转义字符。
'''
#UPLOAD_FOLDER = 'D:\pythonXangmu\pythonproject01\flask\caiquan2\media'
UPLOAD_FOLDER = r'D:\pythonXangmu\pythonproject01\flask\caiquan2\media'

ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER # UPLOAD FOLDER 英文上传文件夹



# 判断上传的文件是否是允许的后缀
def allowed_file(filename):
    return "." in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS#把.

@app.route('/')
def index():
    return render_template('upload.html')

@app.route('/center/upload',methods=['POST'])#对应表单里面的action="/upload"
def center():
    if "file" not in request.files: #"file" 对应前端upload.html 中的name
        return redirect(request.url)#redirect 重定向新的地址

    file = request.files.get('file')  # 获取文件

    if not allowed_file(file.filename): #如果不是传入的指定格式文件。重定向到当前url
        return redirect(request.url)

    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)  # 用这个函数确定文件名称是否是安全
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))  # 保存文件  os.path.join把目录和文件名合成一个路径
        return redirect(url_for('show', filename=filename))


# 展示
@app.route('/show/<filename>')
def show(filename):
    # send_from_directory可以从目录加载文件
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

upload.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文件上传</title>
</head>
<body>
    <form action="/center/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit"  value="提交">
    </form>
    
</body>
</html>


相关推荐
长安米粒贵1 分钟前
缓存明明加了,为什么数据还是不一致?聊聊 4 个容易忽略的边界
后端
yunwei374 分钟前
eBPF 开发实践:使用 eBPF 隐藏进程或文件信息
linux·后端·性能优化
高频因子挖掘机6 分钟前
行情监控脚本重启后,怎样快速恢复而不重复拉取数据?
后端·github·api
aleafboat8 分钟前
只管去写(day2) 用claude分析老项目技术栈
后端
vx_Biye_Design14 分钟前
springboot宠物领养与救助平台64334-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·课程设计·宠物
用户77139702070616 分钟前
.NET 依赖注入入门
后端
泡茶喝茶写代码16 分钟前
A股量化数据工程:从 REST 接口到策略信号(第 5 篇):板块成分股映射与对齐
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据接口
vx_Biye_Design17 分钟前
django就业信息推荐系统61953-计算机课程设计、毕业设计
java·vue.js·spring boot·python·架构·django·课程设计
量化分析码农22 分钟前
【Python量化系统工程实战 #03】任务跑挂了没人知道?用 60 行代码搭一套「监控 + 邮件 + 桌面推送」告警系统
后端
柠檬味拥抱27 分钟前
基于YOLOv8的电梯内电瓶车检测识别(中英文双版) | 附完整源码与效果演示
后端