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')}}
我已经使用以下代码在我的 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')}}