IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> falsk静态多层文件展示+下载 -> 正文阅读

[Python知识库]falsk静态多层文件展示+下载

有偿求助,代码如下,主页展示和下载功能正常。但是只要把首页路由改了,比如改成“/1”,就只有首页可以用,点文件夹进入下层文件夹就报错。

【flask代码】

from flask import Flask
from flask import request
from flask import render_template, send_from_directory
import os
import time
app = Flask(__name__)
# 这里是预先将值存储在系统环境变量中了
app.secret_key = 'QWEaRdskjgkjgads3TYUdI2fdgfsgdafdsafdOPdkjgkjgdskjgkjgaf1234ffdfdasa56fdakjgkjgkfaaa'
DEFAULT_PATH = 'D:/'
current_path = ''

# 获取文件信息的函数
def get_files_data(path):
    """
    获取指定路径下的所有文件、文件夹的信息
    """
    global current_path
    files = []

    for the_name in os.listdir(path):
        # 拼接路径
        file_path = path+"/"+the_name

        # 判断是文件夹还是文件
        if os.path.isfile(file_path):
            the_type = 'file'

        else:
            the_type = 'dir'

        name = the_name

        size = os.path.getsize(file_path)
        size = file_size_fomat(size, the_type)
        # 创建时间
        ctime = time.localtime(os.path.getctime(file_path))

        # 封装成字典形式追加给 files 列表
        files.append({
            "name": name,
            "size": size,
            # 拼接年月日信息
            "ctime": "{}/{}/{}".format(ctime.tm_year, ctime.tm_mon, ctime.tm_mday),
            "type": the_type
        })
    # 更新当前路径
    current_path = path
    return files


def file_size_fomat(size, the_type):
    """
    文件大小格式化,携带单位
    """
    if the_type == 'dir':
        return '<DIR>'
    else:
        if size < 1024:
            return '%i' % size + ' B'
        elif 1024 < size <= 1048576:
            return '%.1f' % float(size/1024) + ' KB'
        elif 1048576 < size <= 1073741824:
            return '%.1f' % float(size/1048576) + ' MB'
        elif 1073741824 < size <= 1099511627776:
            return '%.1f' % float(size/1073741824) + ' GB'


def get_current_path():
    return current_path

@app.route('/', methods=['GET', 'POST'])
def jingshijiaoyu():
    if request.method == 'GET':
        return render_template("jingshijiaoyu.html",
                               data={
                                   "files": get_files_data(DEFAULT_PATH),
                                   "currentPath": DEFAULT_PATH,
                               })

    else:
        # POST 请求下获取传递的路径信息,并返回相应数据
        if request.form.get('pathText'):
            path_text = request.form.get('pathText')
            return render_template("jingshijiaoyu.html",
                                   data={
                                       "files": get_files_data(path_text),
                                       "currentPath": get_current_path(),
                                   })

@app.route("/download_file/<filename>")
def file_content(filename):
    # 若文件存在
    if filename in os.listdir(get_current_path()):
        # 发送文件 参数:路径,文件名

        return send_from_directory(get_current_path(), filename)
    else:
        return render_template("download_error.html", filename=filename)



if __name__ == '__main__':
    # 监听在所有 IP 地址上
    app.run()

【html文件代码】

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="Cache-Control" content="no-cache" />
  <meta http-equiv="Pragma" content="no-cache" />
  <meta http-equiv="Expires" content="0" />
  <title>flask 文件共享</title>
  <link rel="stylesheet" href="../static/css/jingshijiaoyu.min.css">
  <script src="../static/js/jingshijiaoyu.min.js"></script>
</head>

<body>
  <div class="all-container">
    <h1>文件共享</h1>
    <div class="drivers-container">
      根目录:
      {% for driver in data.drivers %}
      <a href="javascript:;" location="{{driver}}" style="color:#66ccff">{{driver}}</a>
      {% endfor %}
      <h3 class="currentPath">当前路径:<span>{{data.currentPath}}</span></h3>
    </div>
    <button class="to-lastPath" onclick="window.history.back()">&nbsp;←&nbsp;&nbsp;上级目录</button>
    <table class="files-table">
      <tr>
        <!-- 表头 -->
        <td class="td-name">文件或文件夹</td>
        <td class="td-size">大小</td>
        <td class="td-ctime">创建日期</td>
      </tr>
      <!-- 将传上来的files进行遍历 输出HTML标签 -->
      {% for file in data.files %}
      <tr type="{{file.type}}">
        <td class="td-name {{file.type}}"><a href="/download_file/{{file.name}}"
            dirname="{{file.name}}">{{file.name}}</a></td>
        <td class="td-size">{{file.size}}</td>
        <td class="td-ctime">{{file.ctime}}</td>
      </tr>
      {% endfor %}
    </table>
    <form action="/" method="POST" style="display: none;" id="pathForm">
      <input type="text" name="pathText" value>
      <input type="submit">
    </form>
    <section class="flash-tablet" style="display: none;">
      <div class="inner-container">
        <div class="drivers-container">
          根目录:
          {% for driver in data.drivers %}
          <a href="javascript:;" location="{{driver}}" style="color:black">{{driver}}</a>
          {% endfor %}
          <h3 class="currentPath">当前路径:<span>{{data.currentPath}}</span></h3>
        </div>
        <button class="to-lastPath" onclick="window.history.back()">&nbsp;←&nbsp;&nbsp;上级目录</button>
        <button id="to-top">返回顶部</button>
      </div>
    </section>
  </div>
</body>

</html>

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:39:41  更:2021-12-01 17:40:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:22:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码