如何使用 FastAPI 提供保存在 docker 卷中的静态文件?
How to serve static files saved in a docker volume with FastAPI?
我已经创建了两个卷,t21db
用于我的 SQLite 数据库,t21images
用于我的图像,在我的 FastAPI 应用程序中我使用 app.mount
将卷的位置挂载到检索图像,这是代码 -
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.mount("/app/images", StaticFiles(directory="."), name="static") # <--- here, is this directory correct?
app.include_router(webapp, prefix='/api/v1/webapp', tags=["WebApp"])
app.include_router(webapptype, prefix='/api/v1/webapptype', tags=["WebAppType"])
我有一个端点,它使用一个函数从卷中获取图像 URL,但这目前似乎不起作用,因为我收到了状态代码 404
def __get_url(self, image, request: Request):
return request.url_for('static', path=f"app/images/{image}")
我就是这样 运行 我的容器和安装卷 -
docker run --mount source=t21db,target=/app/db --mount source=t21images,target=/app/images -p 3088:5000 t21
我之前使用 /app/images
路径检索要编码的图像,但后来更改为提供图像 URL 效率更高
如何在我的应用程序中获取正确的卷路径来提供静态文件?
希望对您有所帮助,
我在 docker 中没有安装目录的情况下使用的是
app.mount("/static", StaticFiles(directory="static"), name="static")
app.mount("/media", StaticFiles(directory="media"), name="media")
确保正确设置目录
并尝试
app.mount("/images", StaticFiles(directory="images"), name="images")
我什至使用了 traefik 或 nginx 而没有安装我的 statics 或 ... 文件夹
好的,所以解决方案是将路径添加到 directory
作为 app.mount
中的初始路径参数
所以这有效 -
app.mount("/app/images", StaticFiles(directory="/apps/images"), name="static")
我已经创建了两个卷,t21db
用于我的 SQLite 数据库,t21images
用于我的图像,在我的 FastAPI 应用程序中我使用 app.mount
将卷的位置挂载到检索图像,这是代码 -
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.mount("/app/images", StaticFiles(directory="."), name="static") # <--- here, is this directory correct?
app.include_router(webapp, prefix='/api/v1/webapp', tags=["WebApp"])
app.include_router(webapptype, prefix='/api/v1/webapptype', tags=["WebAppType"])
我有一个端点,它使用一个函数从卷中获取图像 URL,但这目前似乎不起作用,因为我收到了状态代码 404
def __get_url(self, image, request: Request):
return request.url_for('static', path=f"app/images/{image}")
我就是这样 运行 我的容器和安装卷 -
docker run --mount source=t21db,target=/app/db --mount source=t21images,target=/app/images -p 3088:5000 t21
我之前使用 /app/images
路径检索要编码的图像,但后来更改为提供图像 URL 效率更高
如何在我的应用程序中获取正确的卷路径来提供静态文件?
希望对您有所帮助,
我在 docker 中没有安装目录的情况下使用的是
app.mount("/static", StaticFiles(directory="static"), name="static")
app.mount("/media", StaticFiles(directory="media"), name="media")
确保正确设置目录
并尝试
app.mount("/images", StaticFiles(directory="images"), name="images")
我什至使用了 traefik 或 nginx 而没有安装我的 statics 或 ... 文件夹
好的,所以解决方案是将路径添加到 directory
作为 app.mount
所以这有效 -
app.mount("/app/images", StaticFiles(directory="/apps/images"), name="static")