Python 文件共享服务器

Posted Foresthe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 文件共享服务器相关的知识,希望对你有一定的参考价值。

基于Flask的Web文件共享

标签:Python, Flask

之前用Java写过一个文件系统,很简陋,一次只能上传一个文件且无回显,这次重新用Python写了一个,因为只需要一个很小的服务,所以就选用Flask了

效果如图:

image-20210805224708815

使用说明:

注:服务器基于Flask,和Python,确保有相应环境

安装flask命令: pip install flask

若是整个打包下载的,解压后路径下有个运行脚本(运行.bat)双击运行就行了。文件共享区域为此运行脚本所在文件夹。也就是把文件放入此文件夹,就可以被找到和下载,同样的任意上传的文件也会被放到该目录下。

上传:拖到指定区域或者浏览本地选择上传均可

下载:点击文件即可下载

打包下载

链接:https://pan.baidu.com/s/1MDX8iLjjaOSHqDtWoRMOZg
提取码:kkkk

源代码

代码量比较少,就没传github了

app.py

from flask import Flask, render_template, send_from_directory, request
import os
import socket
from gevent import pywsgi

app = Flask(__name__)


@app.route(\'/\')
def index():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect((\'8.8.8.8\', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    path = os.getcwd()
    files = list(os.walk(path))[0][2]
    files.remove(\'运行.bat\')
    return render_template(\'index.html\', files=files, ip=ip)


@app.route(\'/upload\', methods=[\'POST\'])
def upload():
    f = request.files[\'files\']
    f.save(os.path.join(os.getcwd(), f.filename))
    return \'{}\'


@app.route(\'/download/<filename>/\')
def download(filename):
    return send_from_directory(os.path.pardir, filename, as_attachment=True)


if __name__ == \'__main__\':
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect((\'8.8.8.8\', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    print(\'复制\' + ip + \':5000\' + \'到浏览器打开\')
    server = pywsgi.WSGIServer((\'0.0.0.0\', 5000), app)
    server.serve_forever()

index.html

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>文件共享</title>
    <link rel="Shortcut Icon" href="/static/img/logo.ico" type="image/x-icon" />
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="/static/css/bootstrap.min.css">
    <script src="/static/js/jquery.min.js"></script>
    <script src="/static/js/bootstrap.min.js"></script>
    <script src="/static/js/fileinput.min.js"></script>
    <link rel="stylesheet" href="/static/css/fileinput.min.css">
    <script src="/static/js/zh.js"></script>
</head>
<body>
<div class="container">
  <h2>在同一局域网下输入{{ip}}:5000即可访问</h2>
  <br>
  <div class="list-group">
      {% for file in files %}
    <a href="{{ url_for(\'download\',filename=file)}}" class="list-group-item list-group-item-secondary">{{ file }}</a>
      {% endfor %}
  </div>
  <br>
<div class="upload-wrap">
    <input id="upload" type="file" multiple="multiple" name="files" />
</div>

    <script>
        $("#upload").fileinput({
            language: \'zh\',                                            // 设置语言
            uploadUrl: "{{url_for(\'upload\')}}",    // 上传地址
            uploadAsync: true,                                         // 默认异步上传
            showUpload: true,                                          // 显示上传按钮
            showRemove: true,                                          // 显示移除按钮
            showPreview: true,                                         // 显示预览
            showCaption: true,                                        // 显示标题
            browseClass: "btn btn-primary",                            // 按钮样式
            dropZoneEnabled: true,                                     // 显示拖拽区域
            maxFileCount: 30,                                           // 允许同时上传的最大文件个数
            enctype: \'multipart/form-data\',
            validateInitialCount: true,
            previewFileIcon: "",
            msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",

        }).on("fileuploaded", function (event, data, previewId, index) {
            window.alert(\'文件上传成功\');
        });
    </script>
</div>

</body>
</html>

待添加功能

  • 支持手机扫二维码访问
  • 支持删除功能
  • 支持浏览下载子目录下的文件

以上是关于Python 文件共享服务器的主要内容,如果未能解决你的问题,请参考以下文章

python实战python一行代码,实现文件共享服务器

python实战python一行代码,实现文件共享服务器

python多线程

一行 Python 代码实现文件共享

C 中的共享内存代码片段

Python一行代码实现文件共享内网穿透公网访问