首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最小FastAPI静态文件服务器脚本

最小FastAPI静态文件服务器脚本
EN

Stack Overflow用户
提问于 2022-11-23 22:07:12
回答 2查看 36关注 0票数 0

我想编写一个从脚本启动的最小FastAPI静态文件服务器,该脚本允许您指定要在命令行上共享的目录。在FastAPI文档中的示例之后,我写了这个。

代码语言:javascript
运行
复制
import uvicorn
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles

server = FastAPI()

if __name__ == "__main__":
    import sys

    directory = sys.argv[1]
    server.mount("/static", StaticFiles(directory=directory), name="static")
    uvicorn.run(app="my_package:server")

如果我使用参数/my/directory运行这个目录中包含的file.txt,我希望能够在URL http://localhost:8000/static/file.txt上下载file.txt,但是这会返回一个HTTP404。

如何编写这个最小的静态文件服务器脚本?

EN

Stack Overflow用户

发布于 2022-11-23 22:40:13

当您调用uvicorn.run(app="my_package:server")时,它实际上启动了一个单独的进程,其中my_package导入的。因此,if __name__ == "__main__":中的所有内容都不会在uvicorn进程中运行,因此您的目录将永远不会被挂载。

一个可能的解决方案是从一个环境变量获取目录,该变量是从一个小型bash脚本中设置的:

代码语言:javascript
运行
复制
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles

server = FastAPI()

directory = os.getenv("DIRECTORY")
server.mount("/static", StaticFiles(directory=directory), name="static")

start.sh

代码语言:javascript
运行
复制
#!/usr/bin/env bash
DIRECTORY=$1 uvicorn mypackage:server
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74553491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档