Python 文件共享服务器
Posted Foresthe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
待添加功能
- 支持手机扫二维码访问
- 支持删除功能
- 支持浏览下载子目录下的文件
以上是关于Python 文件共享服务器的主要内容,如果未能解决你的问题,请参考以下文章