Python番外篇:Flask框架实现一个文件共享服务器

hello,大家好,我是wangzirui32,今天来教大家如何使用Flask框架实现一个文件共享服务器。
开始学习吧!

前言

在工作中,我们时不时会遇到多个人同时向我们需求同一份文件,而手工一个一个发电子邮件,太累,所以诞生了这款文件共享服务器。这款服务器拥有上传文件和下载文件的功能,开启后,整个局域网内连接的设备,都能访问到这个文件共享服务器,并使用它的所有功能。

1. 项目架构

项目结构如下:
在这里插入图片描述
files文件夹下有三个测试文件,templates里准备了四个HTML模板。

2. app.py编写

代码奉上:

from flask import Flask
from flask import render_template, send_from_directory, request, redirect, url_for
import os
import time

# 全局变量 共享的文件夹路径 可以根据需求更改
DIRECTORY_PATH = r"C:\Users\wangzirui32\Desktop\Flask局域网文件共享\files"

# 创建项目
app = Flask(__name__)
app.config['SECURE_KEY'] = 'askydiqyddiudhiudiwuhdhdyjqoijd'

# 获取文件信息的函数
def get_files_data():
    files = []
    for i in os.listdir(DIRECTORY_PATH):
        if len(i.split(".")) == 1: # 判断此文件是否为一个文件夹
            continue
            
        # 拼接路径
        file_path = DIRECTORY_PATH+"/"+i
        name = i
        size = os.path.getsize(file_path) # 获取文件大小
        ctime = time.localtime(os.path.getctime(file_path)) # 格式化创建当时的时间戳

        # 列表信息
        files.append({
   
            "name": name,
            "size": size,
            "ctime": "{}年{}月{}日".format(ctime.tm_year, ctime.tm_mon, ctime.tm_mday),  # 拼接年月日信息
        })
    return files

@app.route("/")
def index():
    """共享文件主页"""
    return render_template("index.html", files=get_files_data())

@app.route("/download_file/<filename>")
def file_content(filename):
    """下载文件的URL"""
    if filename in os.listdir(DIRECTORY_PATH): # 如果需求下载文件存在
        # 发送文件 参数:文件夹路径,文件路径,文件名
        return send_from_directory(DIRECTORY_PATH, DIRECTORY_PATH+"/"+filename, filename)
    else:
        # 否则返回错误页面
        return render_template("download_error.html", filename=filename)

@app.route("/upload_file", methods=['GET',</
  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值