当前位置:首页 > 软件 > 正文内容

Python提供HTTP文件服务的几种方式

一往无前1个月前 (09-29)软件74

Python提供HTTP文件服务的几种方式

Python有多种方式可以用来提供HTTP文件服务,以下是主要的几种方法:

1. 使用内置模块

http.server (Python 3)

python -m http.server 8000
# 或指定目录
python -m http.server 8000 --directory /path/to/files

SimpleHTTPServer (Python 2)

python -m SimpleHTTPServer 8000

2. 使用第三方Web框架

Flask

from flask import Flask, send_from_directory
import os

app = Flask(__name__)

@app.route('/files/<path:filename>')
def download_file(filename):
    directory = '/path/to/files'
    return send_from_directory(directory, filename, as_attachment=True)

if __name__ == '__main__':
    app.run(port=8000)

FastAPI

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles

app = FastAPI()
app.mount("/files", StaticFiles(directory="/path/to/files"), name="files")

Django

# 在urls.py中添加
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ...其他路由
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3. 专用文件服务库

aiohttp

from aiohttp import web
import os

async def handle(request):
    name = request.match_info.get('name', "")
    if not name:
        raise web.HTTPNotFound()
    
    file_path = os.path.join('/path/to/files', name)
    if not os.path.exists(file_path):
        raise web.HTTPNotFound()
    
    return web.FileResponse(file_path)

app = web.Application()
app.add_routes([web.get('/{name}', handle)])

web.run_app(app, port=8000)

Twisted

from twisted.web.static import File
from twisted.web.server import Site
from twisted.internet import reactor

resource = File('/path/to/files')
factory = Site(resource)
reactor.listenTCP(8000, factory)
reactor.run()

4. 其他工具

pyftpdlib (FTP服务)

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

authorizer = DummyAuthorizer()
authorizer.add_anonymous("/path/to/files")

handler = FTPHandler
handler.authorizer = authorizer

server = FTPServer(("0.0.0.0", 21), handler)
server.serve_forever()

webdav

from wsgidav.wsgidav_app import WsgiDAVApp
from wsgidav.fs_dav_provider import FilesystemProvider

provider = FilesystemProvider("/path/to/files")
app = WsgiDAVApp({
    "provider_mapping": {"/": provider},
    "verbose": 1,
})

# 可以使用任何WSGI服务器运行,如:
from wsgiref.simple_server import make_server
httpd = make_server("", 8000, app)
httpd.serve_forever()

选择建议

  • 快速测试:使用内置的http.server
  • 简单服务:Flask或FastAPI
  • 高性能:aiohttp或Twisted
  • 需要WebDAV功能:wsgidav
  • FTP服务:pyftpdlib

根据您的具体需求(性能、功能、安全性等)选择合适的方案。

“Python提供HTTP文件服务的几种方式” 的相关文章

基于 ​​FastAPI 多应用模块化​​ 的最佳实践实现

基于 ​​FastAPI 多应用模块化​​ 的最佳实践实现

以下是基于 FastAPI 多应用模块化 的最佳实践实现,包含子应用路由、静态文件、模板渲染等功能,并保持项目结构清晰:项目结构project/ ├── apps/          &n...

FastAPI 自定义响应模型 + 异常处理器

FastAPI 自定义响应模型 + 异常处理器

在 FastAPI 的最佳实践中,最常用和最推荐的方法是: 🥇 方案1:自定义响应模型 + 异常处理器这是业界标准的做法,原因如下: 完整实现代码from typing import Generic, TypeVar, Any, Optional from pydantic import Ba...

Windows10使用命令行配置NTP时间服务器和更新时间频率

Windows10使用命令行配置NTP时间服务器和更新时间频率

在 Windows 10 中,你可以使用命令行(cmd)或 PowerShell 来配置 NTP 时间服务器和更新时间频率。以下是具体步骤: 1. 查看当前时间配置在开始修改前,可以先查看当前的时间服务器和同步状态: w32tm /query /status w32tm /query /c...

一个简单的短链API程序

一个简单的短链API程序

以下是一个使用 FastAPI 和 SQLite 实现的简单短链 API 程序: 🔗 功能说明: 通过 POST 请求访问 /u?url=原网址,可以创建一个短链(如 /u/abc123)。通过 GET 请求访问 /u/短码(如 /u/abc123),可以跳转到原网址。 📦 项目结构(简单...

一个完整的 FastAPI + SQLAlchemy 异步示例

一个完整的 FastAPI + SQLAlchemy 异步示例

一个完整的 FastAPI + SQLAlchemy 异步示例 项目结构fastapi_sqlalchemy_demo/ ├── app/ │├── __init__.py │├── main.py │├── database.py │├── models.py │├── schema...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。