FastAPI 通过符号链接提供静态文件

FastAPI serving static files through symlinks

我已经使用以下代码在我的 FastAPI 应用程序中安装了静态目录:

from fastapi.staticfiles import StaticFiles

app = FastAPI(
    title="Title of the Application",
    description="Over all description of the application")
app.mount("/public", StaticFiles(directory='public'), name='public')

如果我有一个 symlink 指向应用程序文件夹之外的路径,例如

/home/xyz/app/main.py
/home/xyz/app/index.html
/home/xyz/app/public/data -> /home/xyz/static/whatever.tgz

FastAPI 应用程序可以识别 URL xyz.com/public/index.html,但无法识别 xyz.com/public/data

这可行吗?不幸的是,由于 blob 大小太大,我无法使用 FileResponse。我想 return 以某种方式使用简单的 link 文件。

这是可行的,只要您也在该特定路径中挂载一个 StaticFiles() 实例。例如:

app.mount("/public", StaticFiles(directory="public"), name="public")
app.mount("/publicsym", StaticFiles(directory="public/data"), name="publicsym")

然后在您的 Jinja2 模板中,您可以请求如下文件,例如:

<link href="{{ url_for('public', path='/styles.css') }}" rel="stylesheet">
<img src="{{ url_for('publicsym', path='/image.png')}}" width="50%">

或者,根据您给出的示例(如果指向文件夹中有一个包含“whatever.tgz”文件的“静态”目录):

{{ url_for('publicsym', path='static/whatever.tgz')}}