You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FastAPI中上传图片文件并通过URL供前端访问?

FastAPI 图片上传与静态访问修复方案

你的代码存在三个核心问题:

  • POST接口仅返回文件名,未将文件保存到服务器,前端根本无法通过URL访问到文件
  • GET接口中file变量未定义,它是POST接口的局部变量,跨请求无法直接调用
  • 未配置静态文件服务,FastAPI无法通过URL直接返回服务器上的静态文件

以下是修正后的完整实现:

步骤1:创建静态文件目录

在项目根目录下新建static文件夹,用来存储上传的图片文件。

步骤2:修正后的代码

from fastapi import FastAPI, UploadFile, File
from fastapi.staticfiles import StaticFiles
import os

app = FastAPI()

# 挂载静态文件目录:访问路径为 /static,对应本地 ./static 文件夹
app.mount("/static", StaticFiles(directory="static"), name="static")

# 记录最近上传的文件名(仅用于示例,生产环境建议用数据库存储)
latest_uploaded_filename = None

@app.post("/upload")
async def upload_image(file: UploadFile = File(...)):
    global latest_uploaded_filename
    latest_uploaded_filename = file.filename
    
    # 拼接文件保存路径
    save_path = os.path.join("static", file.filename)
    
    # 将上传的文件写入本地静态目录
    with open(save_path, "wb") as f:
        f.write(await file.read())
    
    # 构建可访问的文件URL
    file_url = f"http://127.0.0.1:8000/static/{file.filename}"
    return {"filename": file.filename, "url": file_url}

@app.get("/get-latest")
async def get_latest_image_info():
    if not latest_uploaded_filename:
        return {"error": "还没有上传任何文件"}
    
    file_url = f"http://127.0.0.1:8000/static/{latest_uploaded_filename}"
    return {"filename": latest_uploaded_filename, "url": file_url}

关键说明

  1. 静态文件挂载:通过app.mount让FastAPI能够处理静态文件请求,访问http://127.0.0.1:8000/static/[文件名]即可直接查看图片
  2. 文件保存逻辑:POST接口中读取上传文件的二进制内容,写入到static目录下,完成服务器存储
  3. 文件名记录:用全局变量记录最近上传的文件名,供GET接口返回对应信息(如果需要支持多文件管理,建议改用数据库存储文件元数据)

测试方式

  1. 启动服务:执行uvicorn main:app --reload(假设代码文件名为main.py)
  2. 上传文件:用curl命令或Postman发送POST请求,比如:
    curl -X POST -F "file=@你的图片路径/image.png" http://127.0.0.1:8000/upload
    
    会直接返回包含文件URL的响应
  3. 获取文件信息:访问http://127.0.0.1:8000/get-latest,即可拿到最近上传的文件信息,也可以直接访问返回的URL查看图片

内容的提问来源于stack exchange,提问作者Kreikten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:05:21