Python 文件共享服务器

时间:2021-08-05
本文章向大家介绍Python 文件共享服务器,主要包括Python 文件共享服务器使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

基于Flask的Web文件共享

标签:Python, Flask

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

效果如图:

使用说明:

注:服务器基于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>

待添加功能

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

原文地址:https://www.cnblogs.com/foresthe/p/15106445.html