Python 文件服务器
时间: 2023-12-14 12:34:28 浏览: 30
以下是两种Python文件服务器的实现方式:
1. 使用Python 2.x自带的SimpleHTTPServer模块实现简单文件下载和上传服务:
- 在命令行中进入需要共享文件的目录,执行以下命令即可启动文件下载服务:
```shell
python -m SimpleServer 8081
```
这将在本地8081端口启动一个简单的文件下载服务,可以通过浏览器访问http://localhost:8081来下载共享的文件。
- 如果需要启动带上传功能的文件服务,可以使用SimpleHTTPServerWithUpload.py脚本,该脚本需要先下载并保存到需要共享文件的目录下,然后执行以下命令即可启动文件上传和下载服务:
```shell
python SimpleHTTPServerWithUpload.py 8089
```
这将在本地8089端口启动一个带上传和下载功能的文件服务,可以通过浏览器访问http://localhost:8089来上传和下载共享的文件。
2. 使用Python Flask框架实现带认证功能的文件服务器:
- 首先需要安装Flask框架,可以使用以下命令进行安装:
```shell
pip install flask
```
- 然后可以使用以下代码实现带认证功能的文件服务器:
```python
from flask import Flask, request, send_from_directory
from werkzeug.utils import secure_filename
import os
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'
app.config['DOWNLOAD_FOLDER'] = 'downloads'
app.config['ALLOWED_EXTENSIONS'] = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
app.config['USERNAME'] = 'admin'
app.config['PASSWORD'] = 'password'
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route('/uploads', methods=['POST'])
def upload_file():
if request.method == 'POST':
username = request.authorization.username
password = request.authorization.password
if username != app.config['USERNAME'] or password != app.config['PASSWORD']:
return 'Unauthorized', 401
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return 'File uploaded successfully'
else:
return 'Invalid file type', 400
@app.route('/downloads/<filename>', methods=['GET'])
def download_file(filename):
username = request.authorization.username
password = request.authorization.password
if username != app.config['USERNAME'] or password != app.config['PASSWORD']:
return 'Unauthorized', 401
return send_from_directory(app.config['DOWNLOAD_FOLDER'], filename)
if __name__ == '__main__':
app.run(debug=True)
```
这将在本地启动一个带认证功能的文件服务器,可以通过浏览器访问http://localhost:5000/uploads来上传文件,访问http://localhost:5000/downloads/<filename>来下载文件,其中<filename>是需要下载的文件名。