当前位置: 首页 > news >正文

flask文件夹列表改进版--Bug追踪

把当前文件夹下的所有文件夹和文件列出来,允许点击返回上层目录,允许点击文件夹进入下级目录并显示此文件夹内容
允许点击文件进行下载

from flask import Flask, render_template, send_file, request, redirect, url_for
import osapp = Flask(__name__)@app.route('/')
def index():files, folder_names, folder_name = getfile()return render_template('index.html', files=files, folder_names=folder_names, folder_name=folder_name)@app.route('/download/<file_name>')
def download_file(file_name):return send_file(file_name, as_attachment=True)@app.route('/show_folder/<folder_name>')
def show_folder(folder_name):files, folder_names, folder_name = getfile(folder_name)return render_template('index.html', files=files, folder_names=folder_names, folder_name=folder_name)# 这里是返回上一级的目录
@app.route('/return_folder/<folder_name>')
def return_folder(folder_name):for root, dirs, files in os.walk(os.getcwd(), topdown=True):for dir in dirs:if folder_name == dir:folder_name = os.path.relpath(root, start=os.getcwd())if folder_name == ".":folder_name = ""files, folder_names, folder_name = getfile(folder_name)return render_template('index.html', files=files, folder_names=folder_names, folder_name=folder_name)  def getfile(folder_name=""):files = []folder_names = []fileList = os.listdir(os.path.join(os.getcwd(), folder_name))for file in fileList:if os.path.isfile(file):files.append(file)else:folder_names.append(file)return files, folder_names, folder_name
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Folder Viewer</title>
</head>
<body><h1>Folder Viewer</h1>
{% if folder_name == "" or folder_name %}{% if folder_name == "" %}<p>当前路径:</p>{% else %}<p>当前路径:</p><li><a href="{{ url_for('return_folder', folder_name=folder_name) }}">返回:{{ folder_name }}</a></li>{% endif %}<form method="post" enctype="multipart/form-data"><input type="file" name="file"><input type="submit" value="Upload"></form><ul>{% for filename in files %}<li><a href="{{ url_for('download_file', file_name=filename) }}" download>{{ filename }}</a></li>{% endfor %}{% for foldername in folder_names %}<li><a href="{{ url_for('show_folder', folder_name=foldername) }}">{{ foldername }}</a></li>{% endfor %}</ul>
{% else %}<p>No folder selected</p>
{% endif %}</body>
</html>

效果:
主页面:
在这里插入图片描述
子目录:
在这里插入图片描述
点击返回可以返回上层目录:

Bug:
目前在子目录没办法下载

问题原因:

<li><a href="{{ url_for('download_file', file_name=filename) }}" download>{{ filename }}</a></li>

这里的定义的路径不支持下载子目录的文件,需要优化 file_name,把子目录的路径包含进去
在这里插入图片描述

相关文章:

  • 2023年新一代开发者工具 Vue ,正式开源!
  • Power BI - 5分钟学习合并文件
  • 【前端面经】即时设计
  • 通过数字证书对PDF电子文件进行数字签名/盖章
  • 【JavaWeb学习-第四章(1)】Ajax
  • QT编译并部署QtMqtt相关环境+跑测demo【超详细教程】
  • 【大语言模型】Transformer原理以及运行机制
  • 面向对象设计与分析40讲(17)双重检查锁定(double-checked locking)范式
  • PostgreSQL 作为向量数据库:入门和扩展
  • redhat 8 安装openstack
  • Elasticsearch之常用DSL语句
  • 数字人私人定制
  • Python将普通图像转化为栅格影像
  • python3遇到Can‘t connect to HTTPS URL because the SSL module is not available.
  • m3u8网络视频文件下载方法
  • 【剑指offer】让抽象问题具体化
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java精华积累:初学者都应该搞懂的问题
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • jQuery(一)
  • Phpstorm怎样批量删除空行?
  • Puppeteer:浏览器控制器
  • vue中实现单选
  • zookeeper系列(七)实战分布式命名服务
  • 番外篇1:在Windows环境下安装JDK
  • 近期前端发展计划
  • 前端代码风格自动化系列(二)之Commitlint
  • 深入浅出webpack学习(1)--核心概念
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 【干货分享】dos命令大全
  • 阿里云API、SDK和CLI应用实践方案
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #Ubuntu(修改root信息)
  • (07)Hive——窗口函数详解
  • (4)STL算法之比较
  • (8)STL算法之替换
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (done) 两个矩阵 “相似” 是什么意思?
  • (二)hibernate配置管理
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (四)模仿学习-完成后台管理页面查询
  • (算法)Travel Information Center
  • (转)Scala的“=”符号简介
  • .CSS-hover 的解释
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .mysql secret在哪_MYSQL基本操作(上)
  • .mysql secret在哪_MySQL如何使用索引
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 验证控件和javaScript的冲突问题
  • .NET处理HTTP请求
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)